2016-10-03 56 views
2

我想調查一個性能問題,其中一個應用程序在64位服務器上運行時運行速度很慢,而在同一臺機器上運行速度很快,或者在其他任何位置運行64位。哪個JIT正在運行我的應用程序

我已經看到這可能與正在使用的JIT編譯器有關。有沒有一種方法可以告訴我用哪個JIT編譯器來運行我的應用程序?我想看看它是不是在服務器上的64位版本工作正常的其他計算機上的不同。

+0

我懷疑你的性能問題來自JIT編譯器,更好地檢查你的代碼並嘗試重構它,並且不要浪費時間。 – mybirthname

+0

不知道如何判斷哪一個是活動的,但你應該明確地嘗試[啓用/禁用RyuJIT](https://github.com/Microsoft/dotnet/blob/master/docs/testing-with-ryujit.md)並比較性能。它有一些錯誤,所以它可能會有性能問題。 –

+1

這可能是一個有用的鏈接。[.NET運行時(CLR),JIT編譯器位於何處?](http://stackoverflow.com/questions/30802270/where-exactly-is-net-runtime-clr-jit-compiler-located)你可以看看在每臺服務器上的DLL文件版本上查看是否有差異。我不確定這是不是RyuJIT 64位編譯器的位置。 –

回答

1

JIT版本

您可以按照漢斯的步驟來驗證RyuJIT加載到你的應用程序。 [2]

使用調試器來確保您有新版本。首先使用Explorer瀏覽運行時目錄,導航到C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319。你會在那裏發現兩個抖動,clrjit.dll是基於Ryujit項目的新的抖動,compatjit.dll是傳統的x64抖動。

項目>屬性>調試>勾選「啓用本地代碼調試選項」。使用「構建」選項卡並確保已刪除抖動強制,「首選32位」選項必須取消選中,「平臺目標」必須設置爲AnyCPU。並使用「應用程序」選項卡選擇框架目標。

使用調試>步入開始調試。調試> Windows>模塊顯示已加載模塊的列表。找到該列表中的抖動DLL,單擊「名稱」列標題按名稱排序。如果您看到compatjit.dll,那麼您正在使用傳統抖動。請注意,你總是會看到clrjit.dll,它們在使用傳統抖動時都會被加載。

[2] https://stackoverflow.com/a/31534544/102351


JIT架構

可以確定通過檢查運行的應用程序是否是一個64位的過程或不使用JIT的體系結構。

Environment.Is64BitProcess 

https://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess.aspx

該屬性被實現爲直接真/假mscorlib程序的64位和32位版本內分別返回。 [1]

[1] https://stackoverflow.com/a/1913908

+0

你認爲「JIT」是什麼意思? – CodeCaster

+0

基於他們的問題,他們問如何檢測x86或x64 JIT是否在他們的過程中使用。 Environment.Is64BitProcess屬性可以確定這一點,因爲它根據加載的mscorlib的體系結構被硬編碼爲真/假。 – Scorpion

+0

不,OP宣稱應用程序在64位的所有服務器上運行都很快,因此他們想要了解該服務器上的JIT編譯器版本是否有所不同。你的回答也使得它聽起來像「JIT」等於「bitness」。 – CodeCaster

相關問題