簡體   English   中英

在C#中,在啟動時,有沒有辦法強制JIT編譯器觸摸整個應用程序中的所有MSIL代碼?

[英]In C#, on startup, is there a way to force the JIT compiler to touch all MSIL code in the entire app?

我們有一個C#程序執行一些定時測量。 不幸的是,它第一次測量比第二次和隨后的時間慢20倍,可能是由於JIT(即時)編譯。

有沒有辦法確保在啟動時整個應用程序中的每一行MSIL代碼都是用JIT編譯器編譯的?

正如ta.speot.is所說,答案可能是使用NGEN; 這是一個預裝配件並將其轉換為您運行的平台的本機代碼的工具。

因此,它通常會在應用程序的設置階段運行。

MSDN有一個指南:

http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.71).aspx

如果您不能使用NGEN,如@ ta.speot.is在評論中所建議的那樣 ,或者在答案中使用 @Russ C ,則另一種方法是為所涉及的代碼“熱身”JITter。

基本上,如果為了進行性能測量而調用一些代碼1000次,那么在進行實際測量之前,只需將其調用一次,而不是對所有代碼進行JIT。

即。 這樣的事情:

MethodUnderTest();

Stopwatch sw = Stopwatch.StartNew();
for (int index = 0; index < 1000; index++)
    MethodUnderTest();
sw.Stop();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM