我的问题非常简单。 我需要创建一个类的20.000个等值,我想要了解它是否在内存方面最好将一个方法放在instanciated类中,或者如果在调用中只有一个方法更好class,然后传递给我需要计算的单个类属性。
我的意思是,就记忆而言,它是最好的:
情景a)
public class b
{
public string name;
public string result;
}
public class a
{
public string myMethod(string name)
{
//do complex things... long method...
}
//create 20.000 istances of class b
//and when I need it... I take one of them and do something like...
myclassB.result=myMethod(myclassB.name)
}
或情景b)
public class b
{
private string name;
private string result;
private string myMethod()
{
//do complex things... long method...
result="something";
}
}
public class a
{
//create 20.000 istances of class b
//and when I need it... I take one of them and do something like...
myclassB.myMethod();
}
我的意思是,当我用它里面的方法创建类的20.000个时,会.net"复制"方法在内存中是20.000倍?或者它只会创建一个,然后由他自己处理?
答案 0 :(得分:3)
就内存使用而言,这两种方案的工作原理相同。
答案 1 :(得分:0)
你不必担心这一点,即使它很重要,让我们采取其他方式,指向一个函数的指针值得大约2个字节的内存,并让我们假设您的方法只需要为每个对象分配这个内存。该应用程序现在占用20Kb的内存。如果这对你来说仍然很重要,那么考虑一下C#中的一个简单的hello world控制台应用程序在发布时附带调试器时会占用4Mb的内存。这是所有方法将占用指向函数的指针的内存的情况下的内存的200倍。这只是为了给你一个关于你必须担心的内存分配背后的洞的图像。
您应该做的最好的事情,特别是因为您在托管环境中编写代码,是考虑您的应用程序需要做什么,以及它的设计。