(评论)
(comments)
原始链接: https://news.ycombinator.com/item?id=39752504
当 Span 超出范围时,Content Disposable 类不会处理底层数组。 以下是正确处置阵列的方法:
``csharp
使用系统;
使用 System.Runtime.CompilerServices;
公共引用结构 ArrayRef : IDisposable
{
私有T[]_array;
public ArrayRef([索引] T[] arr) => _array = arr ?? 抛出新的 ArgumentNullException(nameof(arr));
公共无效处置()
{
_数组=空;
GC.SuppressFinalize(this);
}
}
[结构布局]
结构数据缓冲区
{
公共 IntPtr 句柄;
public bool MapViewOfFile(字符串文件名,FileMode模式,uint大小)
{
var buffer = new ArrayRef(new byte[size]);
if (!CreateFileMapping(fileName, IntPtr.Zero, 0x2, 0, size)) 返回 false;
尝试
{
var view = MapViewOfFileEx(Handle, (MapAccessFlags)(MapRead | MapWrite), 0, (uint)((long)size));
if (view == IntPtr.Zero) 返回 false;
固定(字节* src = 视图)
buffer._array = MemoryMarshal.Cast(src, (size * sizeof(T)));
}
最后
{
UnmapViewOfFile(句柄);
}
句柄 = CreateFileMapping(文件名, IntPtr.Zero, 0x2, (int)size, 0);
返回真;
}
~DataBuffer() => CloseHandle(Handle);
}
````
关于当前的问题,我认为技术的选择取决于各种因素,包括要求、约束、偏好以及对各自技术堆栈的熟悉程度。
从纯粹的性能角度来看,C# 等托管语言通过内置的垃圾收集器和丰富的库提供了便利,但由于其动态特性,需要格外小心才能实现最高效率。 另一方面,C 或 Rust 等低级语言可以让您更好地控制资源,但
reply