Оптимизация умножения.NET

Добавьте следующее в вашу Account XSD-схему, чтобы правильно добавить Shares:


  
    
      
        
        
      
    
  

Подробные сведения и примеры последовательностей XSD см. На этой странице W3C . [ 115]

7
задан Erik Forbes 2 October 2008 в 04:06
поделиться

4 ответа

Это предварительно вычислит любые константные выражения, когда это скомпилирует, включая конкатенацию строк. Без const это будет оставлено в покое.

Ваш первый пример компилирует в этот IL:

.maxstack 2
.locals init ([0] int32, [1] int32)

ldc.i4.1   //load 1
stloc.0    //store in 1st local variable
ldc.i4.5   //load 5
ldloc.0    //load 1st variable
mul        // 1 * 5
stloc.1    // store in 2nd local variable 

Второй пример компилирует в это:

.maxstack 1
.locals init ( [0] int32 )

ldc.i4.5 //load 5 
stloc.0  //store in local variable
14
ответ дан 6 December 2019 в 12:56
поделиться

Смотря на код, сгенерированный моно компилятором, версией с неконстантой выполнение умножения во время выполнения. Таким образом, умножение не оптимизировано. Если Вы делаете константу, то умножение оптимизировано.

Компилятор Microsoft мог бы иметь более агрессивный компилятор, лучшее решение состоит в том, чтобы посмотреть на код, сгенерированный компилятором для наблюдения то, что это делает.

1
ответ дан 6 December 2019 в 12:56
поделиться

Что оптимизировал бы компилятор, вот не умножения 1 серовато-синим, а скорее арифметика со значениями, известными во время компиляции. Так да компилятор оптимизировал бы всю математику в Вашем примере, с или без const.

Править: Компетентный компилятор, должен сказать я.

0
ответ дан 6 December 2019 в 12:56
поделиться

Постоянное распространение является одной из наиболее распространенных и самых легких оптимизаций.

1
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: