我正在研究一個相當直接的(學校)項目。這是一個作業車間調度程序。它是單線程的,它具有非常有限的文件I/O(它讀取一個小問題描述,然後開始嘗試構建解決方案)。 CPU應該是瓶頸。沒有用戶輸入/ GUI。C#性能MS verse單聲道問題
在我的機器上,在發佈模式下,沒有調試器 - 在3分鐘的CPU時間內,我的電腦可以針對特定問題生成/評估20,000個不同的時間表。
在一臺類似的* nix機器上,使用單聲道在3分鐘的CPU時間內執行,服務器設法生成/評估2,000個不同的時間表。 這是速度的1/10。我比較了我的機器和這臺特定服務器的Python性能,吞吐量幾乎相同。
唯一的「系統」打電話,我可以看到作爲不同的是
Process.GetCurrentProcess().TotalProcessorTime.Minutes
但是,消除它一直沒有任何影響通話。
我已經嘗試使用
--aot -O =所有
它沒有任何明顯的影響。
我也試過對它運行單聲道輪廓儀,但結果沒有像我所希望的那樣有幫助。
Hits % Method name
57542 37.45 /usr/bin/mono
11432 7.44 __lll_unlock_wake in /lib64/libpthread.so.0
6898 4.49 System.Linq.Enumerable:Any<jobshop2.JobTask> (System.Collections.Generic.IEnumerable`1<jobshop2.JobTask>,System.Func`2<jobshop2.JobTask, bool>)
6857 4.46 System.Collections.Generic.List`1/Enumerator<jobshop2.JobTask>:MoveNext()
3582 2.33 [email protected]@GLIBC_2.3.2 in /lib64/libpthread.so.0
2719 1.77 __lll_lock_wait in /lib64/libpthread.so.0
在前六行中 - 我只認識其中兩個是我可以改進的'我的代碼'。在完整的輸出中,我可以在/lib64/libpthread.so.0中看到很多調用,這些調用似乎處理鎖定,解鎖,等待,互斥鎖和pthread。我很困惑,因爲它不是一個多線程應用程序。
我正在瀏覽mono網站上的Performance頁面,但沒有什麼會真正跳出來作爲一個問題。我毫不懷疑我的代碼是醜陋而緩慢的,但我並不期待這樣的性能下降。我目前正試圖在我的桌面上安裝Linux,以便我可以在同一硬件上以單聲道運行我的應用程序,以幫助消除該變量 - 但我認爲有人可能會提供一些建議/見解。
編輯: 它的版本是2.10.8單
Mono JIT compiler version 2.10.8 (tarball Sat Feb 16 11:51:56 UTC 2013)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: debugger softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)
請注意,「分鐘」會在0到59之間給出分鐘數。之後它會進行換行。可能是一個與問題無關的bug。 – usr
公平點usr - 但爲我的目的,金額總是少於59。不過,我應該更好地檢查。 –
也許這[SO回答](http://stackoverflow.com/questions/1150002/how-is-the-current-performance-of-the-mono-virtual-machine?rq=1)可以給你更多的見解(間接)。 – pasty