C++ MFC&x2B+;CView调试中刷新速度慢

C++ MFC&x2B+;CView调试中刷新速度慢,c++,performance,visual-studio,mfc,C++,Performance,Visual Studio,Mfc,问题:在MFC中,我的表和图(在视图中)在发布模式下刷新得非常快,在调试模式下刷新得非常慢,直到我开始重新填充数据(我们运行收集大数据集(10000个点)的测试) 我以两种不同的方式使用CView类 我使用我们创建的代码手动绘制表格和图形 我使用工具箱编写的TableGridView:它有自己的GridView类,该类派生自CView 在我开始用大数据集重新填充图形和表之前,这两种方法都会显示非常慢的刷新率 我无法确定刷新速度慢的原因。我进入了发布模式,并关闭了代码优化,这并没有重新创建调试模式

问题:在MFC中,我的表和图(在视图中)在发布模式下刷新得非常快,在调试模式下刷新得非常慢,直到我开始重新填充数据(我们运行收集大数据集(10000个点)的测试)

我以两种不同的方式使用CView类

  • 我使用我们创建的代码手动绘制表格和图形
  • 我使用工具箱编写的TableGridView:它有自己的GridView类,该类派生自CView
  • 在我开始用大数据集重新填充图形和表之前,这两种方法都会显示非常慢的刷新率

    我无法确定刷新速度慢的原因。我进入了发布模式,并关闭了代码优化,这并没有重新创建调试模式的缓慢刷新率


    问题:如果有任何关于如何缩小这种行为原因的建议,我将不胜感激。

    我找到了解决问题的方法,并想与大家分享。在代码的#ifdef(u DEBUG)部分中,我们使用_crtsetdbglag()设置标志 对堆执行额外的内存检查。这大大降低了软件的速度

    凝固后

    _CrtSetDbgFlag(_CRTDBG_CHECK_DEFAULT_DF); 
    

    我的代码在调试模式下运行得非常快

    说明了如何找出时间花在哪里。如果您处理的是大量的小内存分配,我想这将弥补大部分差异。我知道,如果我在循环中进行跟踪(出于调试目的),当循环“长”(例如10000个跟踪)时,这会大大降低我的UI速度。很可能在OnDraw()函数中执行了一些计算量大的操作。如果在没有调试信息的情况下编译,这种代码的运行速度会快得多。库、系统或I/O操作不受影响,例如StretchBlt()被认为是一个“慢”函数,因为它调整了要传输的位图的大小,但编译带有调试选项的应用程序不会使其变慢。我想说的是,检查您是否在OnDtraw()函数中执行计算,该函数可以移动到其他地方,例如在数据更改时(例如在OnUpdate()中),这保证了重新计算,而不是在每次绘制请求中。谢谢各位,您的提示引导我朝着正确的方向前进,我最终发现有助于提高性能的函数是_crtsetdbglag()。