2012-08-16 37 views
16

我正在研究完成特定操作需要多少時間。操作是這樣的:通過Visual Studio性能分析,應用程序運行速度更快

Parallel.ForEach(items, item => SaveScheme(item)); 

SaveScheme方法適用於數據庫:執行一些查詢,並與信息工程。 items集合中元素的數量可以足夠大。

當我運行此操作時,大約需要20-40秒才能完成。但是當我開啓分析功能時,它只需要3秒!

我沒有找到任何有關此問題的信息。我唯一的猜測是,通過分析Parallel.ForEach創建比沒有它更多的線程,但我不知道確切的,即使它是真的,我不知道如何處理它。

那麼,爲什麼會發生這種情況,如何在不分析分析的情況下運行應用程序時如何實現這種性能?


UPD。 Parallel與此無關:我用簡單的foreach進行了測試,而操作仍在3秒內完成!

+0

hmm奇怪,實際上它會放慢速度... – Anuraj 2012-08-16 09:47:36

+0

你試過Concurrency Visualizer嗎? – h1ghfive 2012-08-16 09:50:35

+0

我試過了並發展示器,但是我看到的並沒有告訴我什麼。我知道有多少個線程等,但沒有配置器我不知道當操作需要40秒時會發生什麼。所以,我無法比較它。 – STiLeTT 2012-08-16 10:39:07

回答

30

我找到了答案:

的原因是因爲當你運行Visual Studio中的應用程序時,調試器附加到它。當您使用 分析器運行它時,調試器未連接。

如果試圖通過自身運行.exe文件,或通過與 運行程序的IDE「調試>開始不調試」(或只需按Ctrl + F5) 應用,因爲它與確實應該跑得快探查。

https://stackoverflow.com/a/6629040/1563172

我之前沒找到它,因爲我認爲原因是併發性。

+0

請注意,如果您喜歡在交互式控制檯中運行腳本(例如獲得IPython的好處),則可以通過Python工具 - >交互來分離調試器窗口 - >解除「啓用附加到交互式窗口」,並獲得相同的加速。 – Leo 2015-08-16 15:04:24

0

難道說在性能分析,已經放慢(和減少併發)實際的數據庫工作,代您已經有效地節流瓶頸本身 - 是的數據庫(或....)。

+0

我更新了問題 - 併發不是原因... – STiLeTT 2012-08-17 09:52:37

0

這一結果表明,您的應用程序可能試圖將併發:你的線程都在事實上獲得在eachothers'的方式,或者創建線程的開銷比任何性能增益。事實證明,您的非併發版本運行速度更快!

探查器的使用會影響應用程序的性能;也許它會減慢你的代碼,使你從看到多線程的一些好處。

沒有更多的方法背後的代碼細節,這似乎是最有可能的答案。

相關問題