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