2009-12-17 44 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,您需要关闭代码打开的任何句柄的句柄。

对不起,我不能有更多的帮助。

相关问题