2017-01-09 124 views
0

問題:在MFC中,我的表格和圖形(在視圖中)在發佈模式下刷新非常快,在調試模式下非常慢,直到我開始重新填充數據(我們運行測試收集大量數據集(10,000點))。MFC C++ CView調試中的緩慢刷新率

我以兩種不同的方式使用CView類。

  1. 我使用我們創建的代碼手動繪製表格和圖形。
  2. 我使用工具包編寫的TableGridView:http://www.codejock.com/products/toolkitpro/,它有自己的從CView派生的GridView類。

兩種方式都顯示非常緩慢的刷新率,直到我開始重新填充圖表和具有大型數據集的表格。

我無法確定導致緩慢刷新率的原因。我進入了發佈模式,並關閉了代碼優化,並沒有重新創建調試模式的慢速刷新率。

問題:關於如何縮小這種行爲的原因的任何提示將不勝感激。

+1

[初學者指南性能分析(https://msdn.microsoft.com/en-us/library/ms182372跑的非常快。 aspx)解釋瞭如何找出時間花在哪裏。如果你正在處理大量的小內存分配,我會猜測[調試堆](https://msdn.microsoft.com/en-us/library/974tc9t1.aspx)來彌補大部分差異。 – IInspectable

+1

我知道如果我在一個循環內部進行TRACE(用於調試目的),那麼當循環「很長」(例如10,000 TRACE)時,這會大大減慢我的UI。 – franji1

+0

在OnDraw()函數中執行一些計算繁重的操作是很有可能的。如果編譯時沒有調試信息,這種類型的代碼運行速度會快很多。庫,系統或I/O操作不受影響,例如StretchBlt()被認爲是一個「慢」函數,因爲它調整了要傳輸的位圖的大小,但編譯具有調試選項的應用程序不會讓它變慢。我想說的是檢查你是否在OnDtraw()函數中執行計算,該函數可以在其他地方移動,例如當數據改變時(例如在OnUpdate()中)並且這保證重新計算,而不是每個繪畫請求。 –

回答

0

我找到了解決我的問題,並希望分享它。在代碼的#ifdef _DEBUG部分,我們使用_CrtSetDbgFlag() 設置標誌在堆上執行額外的內存檢查。這大大減慢了軟件的速度。

設置

_CrtSetDbgFlag(_CRTDBG_CHECK_DEFAULT_DF); 

後我的代碼在調試模式下