Effect C# 条款16 尽量减少内存垃圾的心得
来源:互联网 发布:淘宝宝贝图片分辨率 编辑:程序博客网 时间:2024/05/21 10:06
今天写了一个方法,原始不是这样的,下面是一个转换的写法,为了能看的更清楚
StringBuilder str = new StringBuilder("......"); //此处......代表10000个长的一个字符串,这里是做个比方,是因为前面生成的str有这个长度
byte[] byteOut = new byte[str.count];
for(int i = 0;i<65535;i++)
{
byteOut[i] = Convert.ToByte(str.ToString().Substring(i,1),2);
}
当运行之后,发现这个程序的运行时间比较长。
然后想起了effect c#中的第16条,同样也是在一个循环中重复的创建一样的对象的浪费。一个看似没有问题,写起来比较顺手的程序,其实其中每一次的str.ToString()都在重复构建对象,虽然根据数据库连接池来说这构建的对象仅仅放在池中的一个位置,但是在每次循环中都会运行一次这么大字符串的操作会耗费非常多的时间。条款16中也指出,对于这样的问题应该将对象上提,在书中写的是将局部变量提为全局变量来解决。在这里修改为以下的情况就能够解决了
StringBuilder str = new StringBuilder("......"); //此处......代表10000个长的一个字符串,这里是做个比方,是因为前面生成的str有这个长度
byte[] byteOut = new byte[str.count];
string initStr = str.ToString();
for(int i = 0;i<65535;i++)
{
byteOut[i] = Convert.ToByte(initStr.Substring(i,1),2);
}
将局部变量上提,只进行一次操作。在循环中尽量减少程序的执行步骤,这也是上一篇中出现的问题的解决办法。
看似一个很简单的问题,但是在2天内已经出现2次了。在写程序中,疏忽大意出现这种问题确实很平常,这里是因为图像的操作都是一些比较大的循环,所以除了效率问题很容易发现,如果在较小的循环中实际上根本发现不了,但当数据量多的时候就会显现出来了。这也是一个代码效率的问题,在以后的循环中一定要注意这些。
- Effect C# 条款16 尽量减少内存垃圾的心得
- Effective C# Item16:尽量减少内存垃圾
- 尽量减少.NET内存垃圾
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- 《JVM垃圾回收相关内容》开发中,如何尽量减少GC开销,减轻垃圾回收的负担
- 《Effect C++》学习------条款27:尽量少做转型动作
- 尽量减少布尔操作的内存占用,以及布尔的存储方式
- 《Effect C++》学习------条款02:尽量以const,enum,inline替换#define
- 尽量减少union all 的使用
- sql查询中尽量减少的使用
- 使用asp尽量减少服务器端的工作量
- 有效的使用和设计COM智能指针——条款10:尽量减少智能指针和接口指针的混用
- C# 字符串操作--减少垃圾回收压力
- Effective C# Item17:尽量减少装箱和拆箱
- 提高C#编程水平的50个要点 之十六“尽量避免产生资源垃圾”
- 【转】有效减少WinForm程序的内存占用 C#
- 阿森纳惊艳放飞
- innertext outtext innerHtml outHtml
- IDES实例突然消失
- Chrome编译
- ubuntu必装软件之-音乐播放器audacious及显示歌词插件安装
- Effect C# 条款16 尽量减少内存垃圾的心得
- 策略模式(Strategy Pattern)的介绍
- web.xml文件在websphere中会有两个地方存储
- 在Visual Studio 2005里,用ActiveSync来同步模拟器(Windows Mobile 5.0 For Smartphone)
- reactos操作系统实现(61)
- BT下载咋就这么慢呢
- 系统开发中日志管理
- MANIFEST.MF配置
- CSS样式14个高级技巧精选