C# 序列化程序未使用100%CPU

C# 序列化程序未使用100%CPU,c#,performance,serialization,protocol-buffers,C#,Performance,Serialization,Protocol Buffers,目前,我正在运行一些简单的序列化测试。在一个循环中,数千个对象被序列化和反序列化。我注意到这个测试没有使用100%的cpu。有人能解释一下原因吗 更新 我正在序列化到内存中,而序列化是单线程的。我使用标准的.NET二进制序列化和protobuf NET进行比较。您有多核处理器吗?因为,如果是这样,序列化将只使用一个内核,因为它是一个单线程进程。 多核/线程CPU 内存速度开销 磁盘速度开销 IO操作使运行序列化的线程阻塞。 当它被阻塞时,其他进程可能会占用CPU时间。也许您有一个多核CPU,并且

目前,我正在运行一些简单的序列化测试。在一个循环中,数千个对象被序列化和反序列化。我注意到这个测试没有使用100%的cpu。有人能解释一下原因吗

更新


我正在序列化到内存中,而序列化是单线程的。我使用标准的.NET二进制序列化和protobuf NET进行比较。

您有多核处理器吗?因为,如果是这样,序列化将只使用一个内核,因为它是一个单线程进程。

  • 多核/线程CPU
  • 内存速度开销
  • 磁盘速度开销

IO操作使运行序列化的线程阻塞。

当它被阻塞时,其他进程可能会占用CPU时间。

也许您有一个多核CPU,并且序列化代码是单线程的?

CPU的速度更快,因为:

  • 磁盘(偶数SSD)
  • 网络
  • RAM/存储器
如果要分配数千个对象,则可能正在等待某些页面错误


如果您正在执行反序列化多线程,可能会出现一些锁定问题。

代码?另外,您确定它没有在任何一个内核上100%运行吗?如果您的应用程序是单线程的,那么您的最大CPU总使用率为1/(*)是否序列化到文件流或内存流?有多少页错误?:)@gmagana,我查过sysinternals proces explorer,没有一个内核消耗了100%@al我们需要看一些代码…@al Bundy:你有六核处理器吗?@Jesse,没有,是四核的。这有什么区别吗?@Al,我只是想看看6个核上的~18%是否为100%(100%/6=~16 2/3%)。在这种情况下,我猜75%的序列化是CPU绑定的,而25%是I/O。你是说IO访问RAM吗?@Al Bundy:实际上我在考虑磁盘,但是,即使在访问RAM时,也有一些东西会阻塞线程。(例如页面错误)。