我正在研究一个相当直接的(学校)项目。这是一个作业车间调度程序。它是单线程的,它具有非常有限的文件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