当我发现一些我不完全理解的东西时,我正在阅读C#.Net Core中List<T>的实现。static readonly T[] _emptyArray = new T[0]每次底层数组 ( private T[] _items) 应保持(或设置为)为空时,都会使用一个字段。例如,在采用容量参数的构造函数重载中:
public List(int capacity) {
/* Checking if capacity is less then 0 */
if (capacity == 0)
_items = _emptyArray;
else
_items = new T[capacity];
}
Run Code Online (Sandbox Code Playgroud)
这是某种内存优化模式,因为我没有看到任何其他原因可以使用它,而不是简单地将底层数组设置为新的空数组:_items = new T[0]。
而不是简单地设置的基本阵列到一个新的空数组:
_items = new T[0]。
这将分配一个新的空数组很多次很多次,这不太理想。通过拥有一个共享的“空”数组,它T每个应用程序域只执行一次。所有这些空的无意义数组都可以加起来,并对垃圾收集开销产生影响。
您可能会争辩说“只是使用null”,但这将需要大量额外的null测试,并注意它s_emptyArray也用作ToArray()空列表的结果。
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |