我冒这个冒险,这可能是一个新问题但是这里有.我很想将一个方法添加到一个类中,该类可能在给定时间内有数千个实例存储在内存中.现在,另一个选择是使用静态方法创建静态类,并在那里创建[静态]方法,而不是在类中创建实例方法.像这样的东西:
这个:
public static class PetOwner
{
public static void RenamePet(Pet pet, string newName)
{
pet.Name = newName;
}
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
public class Pet
{
public string Name { get; set; }
public void Rename(string newName)
{
this.Name = newName;
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道静态类替代是否会占用更少的内存.
谢谢!
Qui*_*ith 31
根据特定条件和优化,只有数据字段需要按实例存储.例如,定义Int32成员的10,000个类实例将占用约40,000字节的内存.
另一方面,弦乐由于实习而不那么简单.你可以试试这个例子:
object.ReferenceEquals("", string.Empty) // returns true!
Run Code Online (Sandbox Code Playgroud)
如果相同的10,000个实例也定义了一个字符串,并且该字符串对于每个实例都是相同的,那么您将有10,000个引用指向相同的数据,从而大大降低了开销(但在32位环境中,还有另外40,000个引用占用的字节数).
其他人指出的方法,无论是静态还是实例,只加载一次.
使用实例或静态方法的决定不受性能原因的影响,而是受如何使用该方法的影响.在您的情况下,该方法需要将类型的实例作为其第一个参数,因此它也可以是实例方法.
根据我的经验,静态方法作为返回新实例的类型构造函数的替代方法最有用.一旦被调用,构造函数必须返回一个新实例或抛出异常,这可能是不可取的.如果某些内容失败,静态方法可以返回null,或者返回一个缓存的实例(如果构造函数是一个昂贵的操作,后者很有用).
除了古法的回答:
方法在内存中只存在一次,不管它们是否是静态的,所以在内存使用上根本没有区别。
实例方法有一个类实例作为不可见的(可以通过 显式访问this)参数传递给它,本质上是void Rename(string newName)将第二个参数的 newName传递给您的实例方法;因此,生成的烧录指令static void RenamePet(Pet pet, string newName)和void Rename(string newName)看起来基本相同,因此它们在性能或任何方面都没有差异
| 归档时间: |
|
| 查看次数: |
22996 次 |
| 最近记录: |