Информация об изменениях

Сообщение Как правильно закрепить объект в памяти? от 18.02.2019 12:40

Изменено 18.02.2019 12:41 jim100

Как правильно закрепить объект в памяти?
Добрый день!

Есть задача закрепления в памяти массива байтов (на длительное время) для использования оного в unmanaged коде.

После создания объект перемещается в Gen2 с помощью двух вызовов GC.Collect().


byte[] data = File.ReadAllBytes(path);

if (GC.GetGeneration(fontData) != GC.MaxGeneration)
{
    // Move to 2nd generation (?).
    GC.Collect();
    GC.Collect();
}

// Pin byte array.
GCHandle gcHandleData = GCHandle.Alloc(data, GCHandleType.Pinned);


Но что-то мне все это не нра...
Нормальное ли это решение?
И есть ли какие-нибудь техники избежания фрагментации Gen2? (если таких массивов будт много, и жить они будут долго).

Спасибо!
Как правильно закрепить объект в памяти?
Добрый день!

Есть задача закрепления в памяти массива байтов (на длительное время) для использования оного в unmanaged коде.

После создания объект перемещается в Gen2 с помощью двух вызовов GC.Collect().


byte[] data = File.ReadAllBytes(path);

if (GC.GetGeneration(data) != GC.MaxGeneration)
{
    // Move to 2nd generation (?).
    GC.Collect();
    GC.Collect();
}

// Pin byte array.
GCHandle gcHandleData = GCHandle.Alloc(data, GCHandleType.Pinned);


Но что-то мне все это не нра...
Нормальное ли это решение?
И есть ли какие-нибудь техники избежания фрагментации Gen2? (если таких массивов будт много, и жить они будут долго).

Спасибо!