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

C#学习26天:内存优化的几种方法

1.减少对象创建


使用场景:

  • 在循环或密集计算中频繁创建对象时。
  • 涉及大量短生命周期对象的场景,比如日志记录或字符串拼接。
  • 游戏开发中,需要频繁更新对象状态时。 

说明:

  • 重用对象可以降低内存分配和垃圾回收的开销。
  • 使用对象池(Object Pooling)技术来管理可重用对象的生命周期

 示例:

// 不优化的情况:每次都创建新的 StringBuilder
for (int i = 0; i < 1000; i++)
{var builder = new StringBuilder();builder.Append("Number: ");builder.Append(i);Console.WriteLine(builder.ToString());
}// 优化后的情况:重用同一个 StringBuilder
var sharedBuilder = new StringBuilder();
for (int i = 0; i < 1000; i++)
{sharedBuilder.Clear();sharedBuilder.Append("Number: ");sharedBuilder.Append(i);Console.WriteLine(sharedBuilder.ToString());
}

2.使用合适的数据结构


使用场景:

  • 数据量固定且不需要动态增删时,使用数组代替列表。
  • 需要快速查找、添加和删除操作时,选择字典(Dictionary)或哈希表(HashSet)。
  • 在多线程环境中使用并发集合(如 ConcurrentDictionary)以保证线程安全。 

说明:

  • 选择合适的数据结构可以提高程序的性能和内存利用率。
  • 在使用大型数据集合时,数据结构的选择尤为关键。

示例: 

// 使用 List<T>
List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };// 使用 Array
int[] numbersArray = new int[] { 1, 2, 3, 4, 5 };// 
http://www.xdnf.cn/news/9373.html

相关文章:

  • 【开源解析】基于PyQt5+Folium的谷歌地图应用开发:从入门到实战
  • 在 Ubuntu 22.04 LTS 上离线安装 Docker
  • 002 flutter基础 初始文件讲解(1)
  • 解码 Skate:打造链间可组合应用栈,构建跨越虚拟机的无状态未来
  • 使用 Selenium 进行自动化测试:入门指南
  • sl4j+log4j日志框架
  • 苍穹外卖 09 WebSocket来单提醒客户催单营业额统计
  • 【C++】string类的使用(万字详解)
  • ZYNQ-PS与PL端BRAM数据交互
  • Tesseract OCR 安装与中文+英文识别实现
  • RK3568DAYU开发板-平台驱动开发:I2C驱动(原理、源码、案例分析)
  • 中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航
  • 概念流水账:PHY、PCS、PRBS
  • Vue 项目中 Sass 与 Less 的对比
  • 社区造数服务接入MCP|得物技术
  • 中间件redis 功能篇 过期淘汰策略和内存淘汰策略 力扣例题实现LRU
  • UE5 编辑器工具
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 按钮大小设置的小技巧
  • WHAT - 学习 WebSocket 实时 Web 开发
  • SQL中的锁机制
  • LabVIEW 中不同 VI 间图像传递方法解析
  • 数据结构-排序(1)
  • 基于seal密码库的格加密算法的原理、实现与应用
  • 6个月Python学习计划 Day 7 - 复盘 + 测试日
  • 压缩包方式在Linux和Windows下安装mongodb
  • zynq7020 shm共享内存和OCM
  • Rust 和 Python 如何混合使用
  • 面试题——计算机网络:HTTP和HTTPS的区别?
  • MySQL问题:MVCC是什么?
  • 从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理