我有一套SCADA站端监控程序,代码量约10M,近日我在现场发现,进入监控系统后机器运行正常,但运行2个月左右,系统就明显变慢,重启系统后,运行速度正常。在正常情况下,操作不多,系统每15分钟存一次数据。按理保存数据不应该使系统变慢。我怀疑使内存泄漏。我做了一个试验,在系统每一个调用new的地方,调用一次就计一次数,在调用delete地方也一样,结果我发现,在系统不保存数据的时候,两个计数都不变,但一保存数据,计数明显增加,而且new的计数比delete多,第一次保存:new 346 delete 228,第二次保存:new 559 delete 342,我想,照此发展下去,用不了多久,内存就会用光。用户反映,系统经常出现虚拟内存不足现象,而机器的物理内存是128M,系统刚启动时整个物理内存的用量才64M。操作系统是Win2000 Pro,VC++6.0。请问大虾们怎么回事?

解决方案 »

  1.   

    说明你们的程序写得不够好F5 -> 运行程序 -> 保存一次数据 -> 退出在output\debug窗口中,你可以看到类似下面的东西:Dumping objects ->
    D:\_\testpj\testpj\TreeControl\source\ShellTreeCtrl_beta\ShellTreeCtrl\Demo.cpp(64) : {59} normal block at 0x00344678, 100 bytes long.
     Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
    Object dump complete.以上提示告诉我们demo.cpp第64行分配的内存没有释放。
    类似方法,看看你们的程序内存问题在哪里?
      

  2.   

    感谢oldworm(oldworm)!我马上试一下,请其他大虾也说几句。
      

  3.   

    oldworm(oldworm),你好!我已经发现内存泄漏 :( 但不清楚你的示例中{59}是表示什么,好像是序号什么的。感谢。但我程序比较大,编译器无法指出是哪一行出了问题,请问大虾们怎么办???
      

  4.   

    你使用boundcheck来帮助你查出内存泄漏的地方。