массива В последнее время я работал в оптимизации производительности/памяти и stucked в пустой инициализации массива, который использует универсальный метод для инициализации пустого массива:Разница в производительности в пустой инициализации
выполнение кода родового пустого класса массива :
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];
Я попросил кода выше автора, и он ответил мне:
В основном, все пустые массивы предназначены только для чтения, и равным одному другому, что означает, что вы можете использовать тот же экземпляр (который будет , созданный лениво по требованию во время выполнения) ... Это должно уменьшить общее количество распределений, уменьшить использование памяти и давление в ГК, а должно приводят к некоторому улучшению
Тем не менее, я не могу понять, как бы EmptyArray
Instance
повысить производительность в объявлении массива.
Есть ли разница в производительности в коде, используя следующий подход:
1-й подход:
var emptyStrArr = EmptyArray<string>.Instance;
var emptyFooArr = EmptyArray<Foo>.Instance;
var emptyBarArr = EmptyArray<Bar>.Instance;
2-й подход:
var emptyStrArr = new string[0];
var emptyFooArr = new Foo[0];
var emptyBarArr = new Bar[0];
Просто обратите внимание, что с .NET 4.6 вы можете использовать Array.Empty() - см. https://msdn.microsoft.com/en-us/library/dn906179 (v = vs.110) .aspx –