我有一个用 C#(WinForms应用程序)编写的OCR程序。因此主要目的是裁剪,修改,比较,ocr图像 ..不多或少。当我在较慢的机器上运行这个程序时 - 我的效果会更好!
我的主机(固定电脑):
笔记本的配置(benq joybook P52)
你能猜出什么更快吗?
所以问题是 - 你将如何解释这种异常表现?是否可以提高主PC上的性能?
P.S。:我知道如果不看代码就很难说..对不起
答案 0 :(得分:4)
OCR是非平凡的代码。最合乎逻辑的第一步是衡量!根据两种环境中完全相同的测试数据分析性能。这应该可以让您了解哪些代码在“更快”的机器上花费的时间最长。
答案 1 :(得分:0)
如果没有更多信息,很难说,但是 IF 你在固定的PC上运行为x64编译的代码,你可能会看到我在客户端网站上遇到的问题。 64位代码使用更大的数字,因此可能会更快地填满处理器缓存,这意味着您的代码运行速度较慢。以下是处理同一问题的先前回答的问题:How can compiling my application for 64-bit make it faster or better?
答案 2 :(得分:0)
我会说两个配置文件(我使用的是jetbrains),你可能会在更快的机器上找到一个你没想到的热点。
另外我会说操作系统是一个很大的区别,也许可以获得一个usb可启动迷你XP,200-300mb下载。然后在好的机器上运行代码。
同样可以用2个VM进行测试,只需用XP创建一个虚拟机,用Windows 7创建一个虚拟机,看看是否在同一硬件上有差异。
答案 3 :(得分:0)
您的应用程序是多线程的吗?我刚读过这篇文章,也许它并不适用于你的情况,但仍然非常有趣。
基本上,处理器类型与核心数量和应用程序的内存模型相结合可能有很多话要说。
http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/
摘录:
在某些处理器上,编译器不仅必须避免对易失性读写进行某些优化,还必须使用特殊指令。在多核计算机上,不同的核心具有不同的高速缓存。处理器可能不会在默认情况下保持这些缓存的连贯性,并且可能需要特殊指令来刷新和刷新缓存。
主流的x86和x64处理器实现了强大的内存模型,其中内存访问实际上是易失性的。因此,volatile字段会强制编译器避免某些高级优化,例如从循环中提取读取,但否则会导致与非易失性读取相同的汇编代码。
Itanium处理器实现了较弱的内存模型。要定位Itanium,JIT编译器必须使用特殊指令进行易失性存储器访问:LD.ACQ和ST.REL,而不是LD和ST。指令LD.ACQ有效地说,“刷新我的缓存,然后读取一个值”,ST.REL说,“将值写入我的缓存,然后将缓存刷新到主存”。另一方面,LD和ST可能只访问处理器的缓存,这对其他处理器是不可见的。