Сообщение Как правильно закрепить объект в памяти? от 18.02.2019 12:40
Изменено 18.02.2019 12:41 jim100
Как правильно закрепить объект в памяти?
Добрый день!
Есть задача закрепления в памяти массива байтов (на длительное время) для использования оного в unmanaged коде.
После создания объект перемещается в Gen2 с помощью двух вызовов GC.Collect().
Но что-то мне все это не нра...
Нормальное ли это решение?
И есть ли какие-нибудь техники избежания фрагментации Gen2? (если таких массивов будт много, и жить они будут долго).
Спасибо!
Есть задача закрепления в памяти массива байтов (на длительное время) для использования оного в 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().
Но что-то мне все это не нра...
Нормальное ли это решение?
И есть ли какие-нибудь техники избежания фрагментации 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? (если таких массивов будт много, и жить они будут долго).
Спасибо!