当前位置: 首页 > news >正文

.NET高性能内存管理

.NET高性能内存管理

你是不是还不了解spanMemeoryArrayPool这些用法,随着.net的不断升级,像这些提高性能的用法也层出不穷,本文重点介绍一些能够提升.net性能的用法

开篇之前,先说下提高性能的宗旨,无非就是尽量减少堆上重新分配与数据复制,让内存得以重用或在栈上分配,从而降低 GC 压力、提升访问速度

Span、ReadOnlySpan

它是栈上的结构(ref struct),所以不会触发GC,可以提供数组、字符串等的零拷贝切片,生命周期仅仅局限于当前的栈,也就是当前方法结束,就会清除,不可以跨方法或者异步操作传递。
ReadOnlySpan<T>ref struct,只能用于:局部变量、方法参数/返回值,或 ref struct 的实例字段。
整体比较好用,不过我觉得比较鸡肋的一点是只能在同步方法中使用,不能再异步方法中传递,因为await本质会把方法状态机移到堆上,不过又推出了Memory解决了这个问题,见下文。

{string csv = "1,2,3,4,5";ReadOnlySpan<char> span = csv.AsSpan();ReadOnlySpan<char> firstTwo = span.Slice(0, 3);firstTwo.ToString().Display(); // 输出 "1,2"此时没有有新的字符串分配csv.Substring(0,3).Display(); // 输出 "1,2",此时有新的字符串分配
}

Span<T>仅创建视图,不分配新对象,相比 Substring 或数组切片性能高且无 GC 影响。

堆上切片Memory 、 ReadOnlyMemory

特点和用法类似于Span,不同点时可以分配到堆上

async Task<int> ReadStreamAsync(Stream stream)
{Memory<byte> buffer = new byte[1024];int bytesRead = await stream.ReadAsync(buffer);return bytesRead;
}

上面返回的是Memory类型,传统的方式是返回byte[],但是byte[] 可能导致异步复制,Memory 可直接传递,减少内存分配

在实际开发中,Span其实可以和Memory根据需求进行转换,比如Memory转换成span
Span<T> span = buffer.Span
同样,也可以把span转换为Memory
Memory<T> m = MemoryMarshal.AsMemory(span);

http://www.dtcms.com/a/602216.html

相关文章:

  • [Powershell入门教程]第4天:模块、脚本编写、错误处理与 .NET 集成
  • 哈尔滨模板建站软件asp flash网站模板
  • 江阴公司网站建设河北网络营销推广seo
  • C#9、默认访问修饰符
  • [AI tradingOS] 前端.ts | config.ts转发到后端
  • 凡客网上购物西安百度seo代理
  • MATLAB实现图像PCA降噪
  • 辽阳专业建设网站公司服务公司理念
  • 安卓进阶——RxJava
  • mobilenet v4 导出onnx onnx推理
  • 网站服务器如何维护网络广告案例
  • 奢侈品网站建设中车网站建设的优缺点
  • C/C++ Linux网络编程2 - Socket编程与简单UDP服务器客户端
  • 工业场景漏油硬件检测方法及原理
  • 工业设计就业网站在线优化工具
  • 瑞美吉泮Rimegepant说明书深度解析:用法用量,真实世界疗效
  • 做电影网站主机放哪比较好网站页面设计服务
  • 每日两题day41
  • 网站设计与开发期末考试题建筑模拟器2022下载
  • 访问日志查询功能
  • vite创建vue2项目
  • 【MATLAB例程】二维平面的TOA定位,几何精度因子GDOP和克拉美罗下界CRLB计算与输出
  • 怎么创一个网站赚钱免费入驻的外贸平台
  • 云边云科技SD-WAN解决方案 — 构建安全、高效、智能的云网基石
  • 20251112给荣品RD-RK3588开发板跑Rockchip的原厂Android13系统时适配AP6275P模块的BT蓝牙部分【使用原厂的DTS】
  • MyBatis 专题深度细化解析
  • a做爰视频免费观费网站asp网站如何迁移
  • 网站推广平台wordpress怎么加属性
  • 文创做的好的网站推荐微信公众号属于网站建设
  • 1. Cockpit 管理服务器;2. Linux 软件包管理