【C#随笔】封装一下NativeMemory类
终于,主播也是用上博客园了,可喜可贺
来博客园不能不发文章,所以主播没事干先发个一篇看看实力
.NET6的时候引入了一个新类,叫NativeMemory,里面提供了Alloc Free等方法作为malloc和free的包装
想当年我写非托管内存的时候都是Marshal类起手,居然写了这么久才发现早就有了这玩意,那不得封装一下
首先,NativeMemory的方法直接与指针交互,都不是nint类型,必须得开允许不安全代码
接下来我打算模仿一下.NET自带的IMemoryOwner接口写一个INativeMemoryOwner接口
public interface INativeMemoryOwner : IDisposable
{
Span<byte> Span { get; }
}
很好,有了接口,我们现在还得需要一个静态类和实现类,主播不会起名字,随便起两个名字吧
public static class NativeMemoryGetter
{
private unsafe class DefaultNativeMemoryOwner : INativeMemoryOwner
{
private int byteCount;
private void* ptr;
public DefaultNativeMemoryOwner(nuint byteCount)
{
this.byteCount = (int)byteCount;
ptr = NativeMemory.Alloc(byteCount);
}
public Span<byte> Span => new Span<byte>(ptr, byteCount);
public void Dispose() => NativeMemory.Free(ptr);
}
public static INativeMemoryOwner Rent(nuint byteCount) => new DefaultNativeMemoryOwner(byteCount);
}
OK,非常完美,现在使用NativeMemoryGetter.GetSpan就可以方便的获取堆内存了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端