Как правильно закрепить объект в памяти?
От: jim100  
Дата: 18.02.19 12:40
Оценка:
Добрый день!

Есть задача закрепления в памяти массива байтов (на длительное время) для использования оного в 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? (если таких массивов будт много, и жить они будут долго).

Спасибо!
Отредактировано 18.02.2019 12:41 jim100 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.