2010-11-09 64 views
4

目前我正在运行一些简单的序列化测试。几千个对象在一个循环内被串行化和反序列化。我注意到这个测试没有使用100%cpu。谁能解释为什么?串行器没有使用100%的CPU

UPDATE

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

+1

代码?另外,你确定它没有在任何一个核心上运行100%吗?如果你的应用程序是单线程的,你将有一个最大的整体CPU使用率为1 /( * ) – 2010-11-09 14:34:08

+0

你是否序列化到FileStream或MemoryStream? – 2010-11-09 14:34:50

+0

有多少页面错误? :) – 2010-11-09 14:46:33

回答

3

IO操作使得运行序列化的线程阻塞。
虽然被阻塞,但其他进程可能会占用CPU时间。

+0

你是指IO访问RAM吗? – Kimi 2010-11-09 14:51:22

+0

@Al Bundy:实际上我正在考虑磁盘,但即使在访问RAM时也有可能会阻塞你的线程的事情。 (如页面错误)。 – 2010-11-09 14:56:10

2

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

+0

是的,但进程管理器显示每个核心使用〜18% – Kimi 2010-11-09 14:35:08

+0

@ Al Bundy:你有六孔处理器吗? – 2010-11-09 14:39:31

+0

@Jesse,不,它是四方。它有什么区别? – Kimi 2010-11-09 14:45:26

0
  • 多核心/线程CPU?
  • 内存速度开销?
  • 磁盘速度开销?
+0

我正在序列化到内存中 – Kimi 2010-11-09 14:36:23

1

也许你有一个多核CPU和序列化代码是单线程?

0

CPU的都更快:

  • 磁盘(甚至是SSD)
  • 网络
  • RAM /内存

如果您分配了成千上万个对象,你可能会等待一些页面故障。

如果你正在做一个反序列化多线程,可能会有一些锁定问题。