ILockBytesOnHGlobal WriteAt производительность уменьшается со временем - PullRequest
0 голосов
/ 17 декабря 2009

Я создал ILockBytesOnHGlobal и несколько раз записываю 64 КБ данных. Я заметил, что производительность 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 ]

1 голос
/ 17 декабря 2009
Документация

CreateILockBytesOnHGlobal гласит, что для увеличения блока памяти используется GlobalReAlloc. GlobalReAlloc копирует данные из старого блока памяти в новый (и больший) блок памяти, поэтому со временем производительность снижается.

1 голос
/ 17 декабря 2009

Это чистое предположение, но я нашел это в документации WriteAt

Если ulOffset находится за концом байтовый массив и CB больше, чем ноль, ILockBytes :: WriteAt увеличивается размер байтового массива. Заполнение байты, записанные в массив байтов не инициализирован для какого-либо конкретного значение.

Я нашел документацию здесь . Может ли быть так, что ваш входной массив увеличивается в размере? Вам нужно закрыть все дескрипторы, которые использует ваш код. Часто с Win32 API вам нужно закрывать дескрипторы для любых дескрипторов, которые открывает ваш код.

Извините, я не могу вам помочь.

...