C#怎么减少程序内存?

选择很重要 2014-03-17 04:55:25
.NET应用程序由于需要加载CLR及一些通用类库,并且具有垃圾收集机制,较其他本地语言如C,C++具有较大的footprint,使用.NET创建一个简单的Winform可能就会占用近10M的内存,所以随着开发的进行,内存占用会比较大,请问有没有什么比较好的办法减少内存的使用?
...全文
627 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
风一样的大叔 2014-03-18
  • 打赏
  • 举报
回复
一、避免创建不必要的对象 拿到代码后,第一步就是看设计文档,然后断点一步一步的看代码,大概明白了逻辑之后,发现思路有一些问题。之前的代码处理流程思路大概是下面这样的: 1.将文件读取到内存,实例化 2.根据条件对文件进行检索,并存储到结果集1中 3.对结果集1中的结果进行匹配度计算,并存储到结果集中2 4.按对结果集2进行匹配度排序,取最匹配的10条记录,然后返回 二、优化数据类型及算法 越到后面内存的降低越来越困难。仔细看了代码之后,除了上面之外,代码中也有一些其他问题,比如,一开始就将大量的对象实例化到内存中,然后一直保存。每一条记录中的信息比较多,但真正有用的用于搜索匹配的只有下面四个字段,但是整体的实例化会将其他没有用的字段也一并序列化进去了。导致很多内存被无用的字段占用。 三、采用非托管代码或者模块编写数据处理逻辑 上面的两部操作虽然减少了将近50-60%的内存占用,但是仍然达不到领导的要求,于是又尝试并比较了各种 使用不同的数据结构将数据载入到内存中的内存占用大小,包括直接将文件按类型读成字符串、数组、结构及类,内存占用最小的直接将文件读成字符串,10M的数据文件读进内存也会占用20-30M的空间,还不谈对其进行处理过程中产生的一些临时变量对内存的占用。使用dotTrace及CLR Profile等工具检查之后,发现内存的占用也是这些原始数据。

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧