问题描述
我们在实际编程中使用的内存往往都会超出程序需要的内存,对于桌面应用程序内存是相对廉价的,但如果你在开发ASP.NET应用程序,需要处理服务器上大量的内存时,过度使用内存可能会带来很多痛苦,因此有必要讨论一下.NET内存管理的最佳实践,以减少内存浪费。 程序员在为类中的成员变量获取内存时往往有些多余的行为,因为有些不必要的内存使用会浪费掉一些内存空间,我们来看一段代码: publicclassBadUse { privateSqlConnectioncon=newSqlConnection(); privateDataSetds=newDataSet("MyData"); publicBadUse(){} publicBadUse(stringconnectionString) { SqlConnection=newSqlConnection(connectionString); } publicBadUse(SqlConnectioncon) { this.con=con; } } 如果在我们的系统中使用了多余的内存,类在被调用之前,甚至是构造函数被调用之前,就调用了对象成员初始化程序,它将为所有成员变量获取内存,在上面的代码中,在初始化期间我们创建了一个SqlConnection对象,在那之后,我们都调用默认的构造函数或创建对象的构造函数,因此没有使用已经创建好的对象,重新创建了一遍对象,因此浪费了内存空间。 .NET内存管理最佳实践方法:publicclassGoodUse { privateSqlConnectioncon=null; privateDataSetds=null; publicSqlConnectionConnection//BettertouseProperties { get { if(this.con==null)//Alwayscheckwhetherthereisanexistingobjectassignedtomember this.con=newSqlConnection(); returnthis.con; } set { if(value==null||this.con!=null) { this.con.dispose();//ClearsoutExistingobjectifmemberisassignedtoNull this.con=null;//Alwaysbettertoassignnulltomembervariables } if(value!=null)this.con=value; } } publicGoodUse(){} publicGoodUse(stringconnectionString) { this.Connection=newSqlConnection(connectionString);//Assignesnewobjecttonullmember } publicGoodUse(SqlConnectioncon) { this.con=con; } }.net技术群:163529971
解决方案
解决方案二:
解决方案三:
这对于一个程序本身呢提高不了万分之一的性能,节省不了万分之一的空间,看不出一分钱好处。基本上都是理论概念的议论。如果你写个实际测试来证明对整个应用程序(而不是死抠这一两条语句)的性能提高,那么才有说服力。如果写不出来,除了实在是不会写以外,很可能更主要的原因就是你自己都觉得测试结论不会太有说服力。
解决方案四:
实践往往比理论强。有很多理论,特别是简单的推理,看上去永远都是“对的”。但是不一定有多高的优先级只能用来搞争议。如果能够在10层楼高的地方放心大胆地训练走钢丝的技巧,就不要只在离地1米的地方去训练。所以我们放弃一些简单的议论,可以更简单地去集编程设计中的真正难点的地方。
解决方案五:
写出这样的代码。估计没毕业吧。
解决方案六:
4楼我不觉得这是没毕业的人写的代码
解决方案七:
想法很好,性能有没有提高、可用性还得实践,不过可以一试,我觉得就算对程序性能有十万分之一的提高,也不能小阙它的功能,小的性能都不能注意,从何提大性能?欣赏LZ的想法!
解决方案八:
就像现在手机开发