我已经创建了ILockBytesOnHGlobal并且我重复写了64k的数据。我注意到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();
}
答案 0 :(得分:1)
这是一个纯粹的猜测,但我在WriteAt
如果ulOffset超过了结尾 字节数组和cb大于 零,ILockBytes :: WriteAt增加 字节数组的大小。填充 写入字节数组的字节是 没有初始化为任何特定的 值。
我找到了文档here。可能是你的输入数组的大小增加了吗?您是否需要关闭代码正在使用的任何句柄。通常使用Win32 API,您需要关闭代码正在打开的任何句柄的句柄。
抱歉,我无法提供更多帮助。
答案 1 :(得分:1)
CreateILockBytesOnHGlobal
文档说它使用GlobalReAlloc
来增加内存块。 GlobalReAlloc
将数据从旧内存块复制到新的(和更大的)内存块,因此这会导致性能随着时间的推移而下降。