×

Loading...
Ad by
  • 技多不压身,工到自然成:安省技工证书特训班,点击咨询报名!
Ad by
  • 技多不压身,工到自然成:安省技工证书特训班,点击咨询报名!

我试了经典的"hello"程序,有同样的问题. 难道我下面的测试方法有问题?

我在CView的OnDraw()函数中用下列方法:

#ifdef _DEBUG
CMemoryState dMem;
dMem.Checkpoint();
TRACE("mem:\n\n");
dMem.DumpStatistics();
#endif //_DEBUG

且删除 pDC->TextOut(0, 0, "Hello, world!"); 这行, 它本身消耗内存

将窗口最大最小化几次,Total allocations从 11291 bytes 变成Total allocations: 12491 bytes. 请教哪位有什么办法?

0 bytes in 0 Free Blocks.
923 bytes in 20 Normal Blocks.
5857 bytes in 44 CRT Blocks.
0 bytes in 0 Ignore Blocks.
1636 bytes in 12 Client Blocks.
Largest number used: 8684 bytes.
Total allocations: 11291 bytes.

.......
........
0 bytes in 0 Free Blocks.
923 bytes in 20 Normal Blocks.
5857 bytes in 44 CRT Blocks.
0 bytes in 0 Ignore Blocks.
1636 bytes in 12 Client Blocks.
Largest number used: 8684 bytes.
Total allocations: 12491 bytes.
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 请教有没有人知道VC++MFC应用中,在toolbar上的按钮数目有没有限制? 我现在的问题是重复打开多视图窗口35次左右后, 一些功能就不起作用了, 所有windows的其它应用程序也用不了(点击按钮没有反应). 多谢!
    • 你确定不是内存漏了?
      • 不象. 因为我用了两个空视图来回倒了30几次,有同样的问题.
      • 曾试过在同一个CDialog中, 最多只能用170个左右的editbox, 不知道视图有无类似的问题, 难道重新激活视图框架也消耗资源?
    • 栈溢出.
    • 用VC++6.0MFC编程内存泄漏好像很难解决,刚又用MFC向导新建了一个什么都不干的文件,发现交替改变视图窗口的大小(比如最大与从小之间变换),内存出现泄漏,即使关闭该视图,内存也不能释放, 但关闭整个程序后,内存就释放了.
      用VC++6.0MFC编程内存泄漏好像很难解决,刚又用MFC向导新建了一个什么都不干的文件,发现交替改变视图窗口的大小(比如最大与从小之间变换),内存出现泄漏,即使关闭该视图,内存也不能释放, 但关闭整个程序后,内存就释放了. 不知哪位大侠有解决的办法, VC++.NET是否能解决此问题? 多谢留言!
      • In .NET, you can use garbage collection mechanism (background auto-run), or enforce garbage collection GC.Collect(). Although I’m not sure, you might try destructor in VC++.
      • 看来十有八九是你弄错了.
        • 我试了经典的"hello"程序,有同样的问题. 难道我下面的测试方法有问题?
          我在CView的OnDraw()函数中用下列方法:

          #ifdef _DEBUG
          CMemoryState dMem;
          dMem.Checkpoint();
          TRACE("mem:\n\n");
          dMem.DumpStatistics();
          #endif //_DEBUG

          且删除 pDC->TextOut(0, 0, "Hello, world!"); 这行, 它本身消耗内存

          将窗口最大最小化几次,Total allocations从 11291 bytes 变成Total allocations: 12491 bytes. 请教哪位有什么办法?

          0 bytes in 0 Free Blocks.
          923 bytes in 20 Normal Blocks.
          5857 bytes in 44 CRT Blocks.
          0 bytes in 0 Ignore Blocks.
          1636 bytes in 12 Client Blocks.
          Largest number used: 8684 bytes.
          Total allocations: 11291 bytes.

          .......
          ........
          0 bytes in 0 Free Blocks.
          923 bytes in 20 Normal Blocks.
          5857 bytes in 44 CRT Blocks.
          0 bytes in 0 Ignore Blocks.
          1636 bytes in 12 Client Blocks.
          Largest number used: 8684 bytes.
          Total allocations: 12491 bytes.
          • 内存分配增加不等于内存泄漏。
            • 问题是程序长时间运行后内存就用光了,不知有没有解决的办法?
              • 实际上你上面给的测试程序没有什么意义, 你应该在不同的地方设一些测试点(use the same CMemoryState object ), 然后再看内存的变化。如果你的程序全部用c++和MFC, 实际上VC提供了调试版的内存分配方法, 这样在调试时,输出窗口应该有提示的。
                混合语言编程,就用一些第三方的内存测试软件。
                • 多谢回答!你的方法适用于自己写的某段程序,前后分别设置检测点。我现在是怀疑MFC的界面本身有资源泄漏问题。
                  • Great. Then, happy digging.
    • 这种unmanaged C++ code很伤脑精的,该淘汰了
      • 感觉新的managed C++不包含MFC部分吧? 如果放弃MFC的类,纯用API函数写界面太麻烦了. 正在犹豫是否用.NET来写.
        • Don’t understand why you worry about GUI part in .NET C++. Look at
          Managed FW 2.0 MFC FW 1.1 and 3.5 are also available.
          • thanks. because I never use the VC++.net before.