【发布时间】:2015-07-16 07:02:24
【问题描述】:
最近,我一直在进行性能/内存优化,并且一直坚持使用泛型方法初始化空数组的空数组初始化:
泛型空数组类的代码实现:
public static class EmptyArray<T>
{
public static readonly T[] Instance;
static EmptyArray()
{
Instance = new T[0];
}
}
因此,无论何时创建任何类型的空数组,它都被称为:
var emptyStringArray = EmptyArray<string>.Instance;
这种空数组声明已经在代码库的许多地方完成。我很困惑使用时性能会有什么不同:
var emptyStringArray = new string[0];
我已经问过上面的代码作者,他回复了我:
基本上,所有空数组都是只读的,并且等于一 另一个,这意味着您可以使用相同的实例(这将是 在运行时根据需要延迟创建)......这应该减少 分配总数,减少内存使用和GC压力,以及 应该会有所改善
不过,我无法理解 EmptyArray Instance 如何提高数组声明的性能。
使用以下方法的代码是否有任何性能差异:
第一种方法:
var emptyStrArr = EmptyArray<string>.Instance;
var emptyFooArr = EmptyArray<Foo>.Instance;
var emptyBarArr = EmptyArray<Bar>.Instance;
第二种方法:
var emptyStrArr = new string[0];
var emptyFooArr = new Foo[0];
var emptyBarArr = new Bar[0];
【问题讨论】:
-
请注意,从 .NET 4.6 开始,您可以使用 Array.Empty
() - 请参阅 msdn.microsoft.com/en-us/library/dn906179(v=vs.110).aspx
标签: c# .net arrays performance clr