Есть ли разница в производительности между int i = 0 и int i = default (int)? - PullRequest
3 голосов
/ 13 июля 2011

Я создавал целое число и хотел создать экземпляр с 0, прежде чем работать с.

Я написал сначала

int i = default(int);

затем я удалил его, чтобы заменить другим, который

int i = 0;

Я хотел бы знать, является ли мой выбор лучшим в исполнении mini mini . Будет ли функция default () увеличивать инструкции во время компиляции?

Ответы [ 3 ]

10 голосов
/ 13 июля 2011

Нет, они разрешаются во время компиляции и выдают один и тот же IL. Типы значений будут 0 (или false, если у вас есть логическое значение, но все равно 0), а ссылочные типы - null.

4 голосов
/ 13 июля 2011

Ответ Марлона является технически правильным, но между каждой опцией должна быть четкая семантическая разница.

int i = 0;

Инициализация до буквального нуля имеет смысл, когда вы хотите выполнить математическую операцию над целым числом, иэта операция должна начинаться с переменной, имеющей конкретное значение ноль.Хорошим примером будет создание переменной счетчика индекса;Вы хотите начать с нуля и считать до.

int i = default(int);

Установка переменной на ее значение default имеет смысл, когда вы, например, создаете класс с указанной переменной, где вы знаете, что переменная будетбыть установленным позже в процессе.Вот пример (каким бы непрактичным он ни был):

class IntegerClass
{
    private int value;

    public IntegerClass(int value)
    {
        this.value = value;
    }

    public void Reset()
    {
        this.value = default(int);
    }
}

Опять же, они технически равны (и фактически будут компилироваться в идентичные CIL ), но каждый из них имеет свое семантическое значение.

Кроме того, использование default может потребоваться для инициализации переменной при использовании шаблонов.

public T SomeOperation<T>()
{
    T value = default(T);

    this.SomeOtherOperation(ref value);

    return T;
}
1 голос
/ 13 июля 2011

Единственное реальное отличие, которое он будет иметь, это время компиляции, поэтому я полагаю, что это будет на миллимилли миллимилли миллисекунду быстрее, чем в другом случае, когда вы нажимаете Debug или Compile, но как только он скомпилирован, это будет точно так же, как сказал Марлон

Эти небольшие изменения будут влиять только на ваше фактическое время программирования, поэтому в более широком смысле этого слова запись по умолчанию (int) выполняется медленнее, чем запись 0 и времени, когда выМысль об этом заняла еще больше времени.

...