2009-12-17 41 views
0

我創建了ILockBytesOnHGlobal,我重複寫入64k的數據。我注意到,WriteAt性能隨着時間的推移而下降。ILockBytesOnHGlobal WriteAt性能隨着時間的推移而下降

可能是性能下降的原因是什麼? 它是否與流增長有關? 下面是我在做什麼(在C#)

public override void Write(byte[] buffer, int offset, int count) 
    { 
     EnsureBufferSize(count); 
     Marshal.Copy(buffer, offset, hGlobalBuffer, count); 
     lockBytes.WriteAt(writeOffset, hGlobalBuffer, count, out temp); 
     writeOffset += temp.ToUInt32(); 
    } 

回答

1

CreateILockBytesOnHGlobal文檔說它使用GlobalReAlloc來增加內存塊。 GlobalReAlloc將舊內存塊中的數據複製到新的(和更大的)內存塊,因此這會導致性能隨着時間的推移而下降。

+0

啊,我錯過了。聽起來像罪魁禍首! –

1

這是一個純粹的猜測,但我發現這個的WriteAt

的文檔中。如果ulOffset是過去 字節結束數組和cb大於 零,ILockBytes :: WriteAt增加 字節數組的大小。寫入字節數組的字節填充 是 未初始化爲任何特定的 值。

我找到了文檔here。難道你的輸入數組的大小會增加嗎?你需要關閉你的代碼使用的任何句柄。通常使用Win32 API,您需要關閉代碼打開的任何句柄的句柄。

對不起,我不能有更多的幫助。

相關問題