ILockBytesOnHGlobal WriteAt性能随着时间的推移而降低

时间:2009-12-17 13:55:36

标签: .net c++ winapi interop com-interop

我已经创建了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();
    }

2 个答案:

答案 0 :(得分:1)

这是一个纯粹的猜测,但我在WriteAt

的文档中发现了这一点
  

如果ulOffset超过了结尾   字节数组和cb大于   零,ILockBytes :: WriteAt增加   字节数组的大小。填充   写入字节数组的字节是   没有初始化为任何特定的   值。

我找到了文档here。可能是你的输入数组的大小增加了吗?您是否需要关闭代码正在使用的任何句柄。通常使用Win32 API,您需要关闭代码正在打开的任何句柄的句柄。

抱歉,我无法提供更多帮助。

答案 1 :(得分:1)

CreateILockBytesOnHGlobal文档说它使用GlobalReAlloc来增加内存块。 GlobalReAlloc将数据从旧内存块复制到新的(和更大的)内存块,因此这会导致性能随着时间的推移而下降。