【问题标题】:ILockBytesOnHGlobal WriteAt performance decreases over timeILockBytesOnHGlobal WriteAt 性能随时间降低
【发布时间】:2009-12-17 13:55:35
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 啊,我错过了。听起来像是罪魁祸首!
    【解决方案2】:

    这是一个纯粹的猜测,但我在WriteAt的文档中找到了这个

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 2018-08-20
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多