我正在使用的軟件是一個插件DLL,一切工作正常,正常執行期間預期,但當主機卸載該模塊,內存釋放緩慢(幾個對象數組是通過「delete []」取消分配。如果我拿走所有「delete []」指令,模塊卸載變得更快)。這只是在調試版本發生的時候,發佈版本很快就會被卸載。我也注意到,如果我在其中一個析構函數中放置斷點,調試也很慢(每條指令平均需要2secs)。任何想法爲什麼發生這種情況?C++「刪除」調試版本緩慢
回答
不確定你的情況。我已經看到類似的MS IDE和調試生成和報告內存泄漏。如果由於某種原因許多對象泄漏了,那麼將它們報告到輸出窗口花費了相當多的時間。
我發現當泄漏很多時,這需要幾分鐘。 。 – drescherjm
我打算啓用我的心理調試帽,並假設您使用的是VC++。這是一個重要的信息,因爲它不提供我不得不猜測。
接下來,你會說「每條指令平均需要2秒」。如果通過「指令」指的是彙編語言指令,那麼這是調試器運行緩慢的一個單獨問題。有各種原因,例如設置了太多斷點(https://randomascii.wordpress.com/2011/07/02/xperf-and-visual-studio-the-case-of-the-breakpoint-hangs/),在源集中顯示線程(https://randomascii.wordpress.com/2013/03/03/visual-studio-single-step-performance-fixes/)或其他可能的原因。但這是調試器的問題,而不是調試版本問題。
在調試器下運行時,Windows堆運行速度較慢 - 它會執行其他檢查。這可能是問題,但請注意,這與您是否正在運行調試版本無關。
CRT堆在調試構建中運行速度較慢,並獲取每個分配和空閒的鎖,從而對分配進行序列化。而且,如果設置了_CRTDBG_CHECK_ALWAYS_DF,那麼整個堆將在每個alloc和free上檢查一致性,這可以使它們的數量級變慢。
要知道哪個是真正的問題的唯一方法是配置文件。
- 1. Grails - 緩慢刪除
- 2. 本機C++ OpenGL託管C++ Winform C# - 調試過程中緩慢
- 3. C++調試版本
- 4. 外鍵緩慢刪除
- 5. 的DbContext的調試版本慢
- 6. 緩慢調試Grails的
- 7. 非常緩慢的調試
- 8. 爲什麼Android應用程序調試版本中刪除穿戴式版本
- 9. 試圖刪除舊的PHP版本
- 10. 如何調用刪除版本?
- 11. 刪除發佈版本中的調試字符串
- 12. 刪除Android版本中的調試資源
- 13. Swift 2:刪除速度緩慢增加
- 14. 在Oracle BIG表中刪除緩慢
- 15. 的cocos2d ccArray刪除對象是緩慢
- 16. Postgres緩慢運行刪除查詢
- 17. 刪除舊版本
- 18. Visual Studio 2013:緩慢的調試性能
- 19. 在vim中調試緩慢的php omnicomplete
- 20. Android - 調試運行緩慢的代碼
- 21. 調試緩慢的Django管理視圖
- 22. 緩慢的xcode 4調試器
- 23. Visual Studio Ultimate 2013緩慢啓動調試
- 24. MySQL調試工具緩慢查詢?
- 25. 刪除試用版和JasperServer
- 26. 調試安裝的版本 - C#
- 27. MFC C++ CView調試中的緩慢刷新率
- 28. visual C++強制發佈版本使用調試版本代碼
- 29. UIWebView調整緩慢
- 30. Asp.net發佈版本與調試版本
在Visual Studio調試版本中,分配例程中存在內存損壞檢測。這些將需要一些時間。還有內存泄漏檢測。 – drescherjm
我發現每條指令2秒很難相信。 –
@KeithRandall我打賭「每條指令」只包括他在代碼中找到的'delete []'的數目。我敢打賭,每一個都被執行了很多次。我還敢打賭那些叫'刪除'的次數更多,他也沒有包括。我猜測每個堆的重新分配少於2秒。 –