[C#] 8.0 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용
.NET Framework: 866. C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용 (sysnet.pe.kr)
.NET Framework: 866. C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용
글쓴 사람 정성태 (techsharer at outlook.com) 홈페이지 첨부 파일 부모글 보이기/감추기 C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용 지난 발표에서, .NET Conf 2019 Korea - "닷넷 17
www.sysnet.pe.kr
public unsafe ref struct NativeMemory<T> where T : unmanaged
{
int _size;
IntPtr _ptr;
public NativeMemory(int size)
{
_size = size;
long lSize = _size;
lSize *= sizeof(T);
IntPtr bufSize = new IntPtr(lSize);
_ptr = Marshal.AllocHGlobal(bufSize);
}
public Span<T> GetView()
{
return new Span<T>(_ptr.ToPointer(), _size);
}
// C# 8.0에서만 using과 함께 사용 가능
public void Dispose()
{
if (_ptr == IntPtr.Zero)
{
return;
}
Marshal.FreeHGlobal(_ptr);
_ptr = IntPtr.Zero;
}
}
static unsafe void Main(string[] args)
{
int bufSize = 1024;
Action<int> a2 = (count) =>
{
// 무한 루프를 돌며,
while (count-- > 0)
{
/ Native Heap, 즉 비-관리 힙으로부터 배열 메모리 할당
using (NativeMemory<int> buf = new NativeMemory<int>(bufSize))
{
Span<int> viewBuf = buf.GetView();
viewBuf[0] = 0;
viewBuf[bufSize - 1] = 0;
}
}
};
}