2010-11-09 29 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 /內存

如果您分配了成千上萬個對象,你可能會等待一些頁面故障。

如果你正在做一個反序列化多線程,可能會有一些鎖定問題。