C# 班级成员占用内存吗?
类通常由成员变量和方法组成。当我们创建类的实例时,会为类的成员变量分配内存。成员方法是否也占用内存?这些方法存储在哪里?假设我们有以下类:C# 班级成员占用内存吗?,c#,asp.net,.net,memory,C#,Asp.net,.net,Memory,类通常由成员变量和方法组成。当我们创建类的实例时,会为类的成员变量分配内存。成员方法是否也占用内存?这些方法存储在哪里?假设我们有以下类: public class Person { public string Name { get; set; } public Person(string name) { Name = name; } public string SayName() { string hello = "Hello
public class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public string SayName()
{
string hello = "Hello! My name is ";
return hello + name;
}
}
Person p = new Person("John");
string yourName = p.SayName();
SayName()
函数在调用堆栈上运行,并且Person p
对象及其属性(Name
)将保留在内存中,直到垃圾收集进入并清除它
在内存方面,您应该更关注对象的实例字段(属性)、正在处理的对象数量,以及对象是否在某段时间处于读取器
或连接
。如果您的对象是<代码> Reader <代码>或<代码>连接< /代码>,您需要考虑< <代码> > < /Cord>语句> < /P>
伪代码:
using(DatabaseConnection dbConn = new DatabaseConnection()
{
// Process your calls and data
}
// The object is Disposable and it's resources are cleared
类只是一个蓝图,只要没有定义类类型的变量,它就不会占用任何空间。定义类类型的对象/实例后,类成员将在内存中占用一些空间。
实例的大小等于类中定义的成员大小之和。方法实现占用每种类型的内存(我认为每种泛型的细化都会占用内存),但这不会增加每个对象实例的内存。例如,obj.GetType()
返回表示所述方法(以及一系列其他内容)的类型。(实例)变量当然是每个实例的。@pst,为什么要发表评论这样好的答案?@AlexeiLevenkov说得很好。我肯定会投赞成票,我自己用我认为相当不错的答案回答了这个问题。@AlexeiLevenkov,因为它只是一个小的摘要,而且不完整:)“不,声明的方法不以每个实例为基础占用内存”可能是这里最简单的视图…“SayName()中的变量”,这将是hello,只在函数在作用域中时留在内存中。因此,一旦函数完成,变量就不再在内存中。“不完全正确,GC可以在不再需要引用时收集它们(这包括this
!)是。这是真的。我想我应该在访问方面说得更清楚一些。“我认为,阅读器
或连接
”的某个时间[原文如此]——简单地概括为IDisposable
可能更清楚,我认为