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