读书人

做了个截屏后比较的程序运行一段时间

发布时间: 2012-02-26 20:19:45 作者: rapoo

做了个截屏后比较的程序,运行一段时间后就出现错误。
为了查看上班时间用电脑做什么,思路是:在电脑启动时自动运行程序(截图后让两个图片内容一样),判断是否在上班时间,如果在上班时间,屏幕有变化(图1将重新截,然后用ScanLine比较两图)则将变化存入数据库。如果屏幕无变化则不存。现在问题是程序运行一段时间后就出现错误:有时是内存地址占用问题,有时是存储空间不足问题,怎么回事?是我的bitmap没正确释放?

[解决办法]
从你贴的错误信息上看不出具体问题何在,估计是内存没释放,或者数据库的问题。

关键是你没必要一直比对,你应该写一个APIHook(例子代码网上多得很),接管InvalidateRect、InvalidateRgn,有更新区域之后再存。

[解决办法]
内存访问出错,查你的程序是否有内存泄漏.测试程序时将编译项的Runtime errors全部打开,或用第三方的测试工具(如boundcheck)对程序进行测试.
[解决办法]
那你不是一直在截图、比对吗?:)

[解决办法]
对于这类内存出错,可以根据报错信息找到源代码行,然后就好定位了,给你一个方法供你参考,百试百灵:

Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
[解决办法]
存储空间不足时,看看是否是存储文件超限了
还有你那比较的时间间隔是怎么控制的?

读书人网 >.NET

热点推荐