26

我們更多的C#代碼發佈是建立與「優化代碼」選項關閉。我相信這是爲了允許在發佈模式下構建的代碼更容易調試。優勢打造

鑑於我們正在創造它連接到後端的Web服務相當簡單的桌面軟件,(即不是特別處理器密集型應用程序),那麼如果任何類型的性能損失可能期望什麼呢?

並且任何特定的平臺可能會受到更嚴重的影響?例如。多處理器/ 64位。

+0

我已經看到了這個謬論運行在舊的商店仍舊陷於C/C++文化中,因爲他們(宣稱)試圖轉向更新的技術。 –

+0

@Greg D - 有趣的是,我原以爲C++文化會更喜歡優化 - 或者這不是您的意思? –

+1

@gt:我最常遇到的C++文化_claims_喜歡優化和「快速代碼」,但大多數這樣的說法都是基於對任何新事物或不同事物的迷信和無理的恐懼。我不否認我所指的文化功能障礙,但我確實認爲它在這個特定的商店之外也很普遍。儘管有相反的證據,儘管有相反的證據,但他們堅持認爲_their_ C++代碼具有比一些合理編寫的C#代碼更優異的性能特徵,例如令人驚訝的人數。我經常聽到「我會管理自己的記憶,謝謝你」。 –

回答

13

完整的詳細信息,請http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx

簡單...

在託管代碼,在運行時的抖動程度幾乎所有的優化。從這個標誌產生的IL的差異非常小。

+5

我不確定爲什麼那個報價很重要。即使生成的IL不是,JITter的優化也會受到該標誌的影響,因此該標誌將對性能產生影響。原來的問題是關於這種差異的大小。 – phoog

2

由編譯器完成的優化是相當低的水平,不會影響用戶的體驗。

如果您想以量化對應用程序的優化,只需輪廓非優化和優化構建,並比較結果。

+0

我注意到調試器在它存在時跳過行。這在VS 2013和15順便!有時我只是爲了調試目的而在本地切斷它。 – arviman

6

其實是有區別的,有時相當顯著。什麼能真正影響性能(因爲它是一些JIT沒有充分照顧):

  • 不必要的局部變量(即,更大的堆棧每個呼叫幀)
  • 過於籠統條件指令,JIT翻譯他們以相當直接的方式。
  • 不必要的分支(也不能由JIT服務好 - 畢竟,它沒有太多的時間來完成所有的智能優化技術)

    所以,如果你正在做一些數字 - 打開優化。否則,你根本看不到任何區別。

26

您是唯一可以回答「性能問題」問題的人。嘗試兩種方式,衡量性能,看看會發生什麼。命中可能是巨大的,或者可能是不靈敏的;沒有人閱讀這篇文章,知道對您來說「巨大」意味着一微秒還是二十分鐘。

如果你有興趣在由C#編譯器都做了什麼優化 - 而不是抖動 - 在優化開關接通時,看到:

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx