本人做的一个程序,是数据采集和实时监控的,需要连续运行,并且会在运行中产生大量的线程,处理完后线程就退出。现在这个程序在很多客户处运行,有的会在连续运行7、8天后出错,有的连续运行20、30天后出错,有的几个月也不出错。 错误提示都是非法内存访问。查不出哪里出问题了。在写这样的程序时,需要注意些什么东西?
解决方案 »
- 在已经加载bmp图片的PICTURE控件上画圆,为何圆显示不出来?
- DC画图时出现错误:_pLastBlock == pHead
- 如何响应同时按下Ctrl+<-(左移)键?
- 请教高手问题,关于连接错误的
- 一个很郁闷的问题
- 怎样在一个对话框中关闭另一个对话框?
- 一个折磨我好长时间的问题:关于Microsoft ADO Data Control的使用,通常使用这个控件是在属性设置中处理的,现在我想在程序中解决,我该
- 有关HIMAGELIST ATTACH的问题(在线给分)
- 请问如何得到HTML文件中字体的象素尺寸?
- 为什么只有在我的程序激活的时候才会hook?
- 急问!关于atof的问题
- 如何看一个com实现了那些接口?
线程多的话,换用IOCP吧
<2> 足够的异常处理第一条的意思是:
对内存来说:频繁申请/释放大块的内存,会导致内存碎片的产生,最终导致操作系统的内存资源枯竭,或者某一个时刻内存不足.(此时你直接或间接使用内存的代码将出现异常)
对I/O来说:频繁打开/关闭IO,除非理论上IO为绝对可靠(实际任何操作,包括内存的可靠均为相对可靠,没有绝对可靠),那么你中途打开/关闭IO的时候,将出现异常. 另外你也容易上在你底下的开发IO服务的供应商也容易犯第一条错误
对文件来说:频繁申请/释放文件的话,在你中途再次申请的时候,有机会打开失败(如被别人占用,操作系统自身申请超时,硬盘内存工作超时等等)
对线程来说:创建,关闭线程是会导致操作系统有内存,CPU分配开销的,会导致频繁申请/释放内存,句柄等系统资源,非常有机会出现资源不足总的来说,避免频繁的申请/释放资源操作,有这种操作的就是意味着你的程序是不稳定,容易收到外界影响第二条的意思:
做的再好的外部接口(底层服务程序,硬件,数据库,操作系统接口等等)也会偶尔出现工作异常,但是这个高强度的应用程序是不容许这个偶尔的
总的来讲:若在你的观念中认为打交道的外部接口都不是可靠,那么你的程序空间内部往往可以做的可靠
我的经验:
申请的资源在使用后要尽快释放:在一般的商业级应用是正确的,在工业级设计中是错误的
申请的资源在完全不用时才释放:在一般的商业级应用是错误的,在工业级设计中是正确的商业级的应用程序:计算机资源为大家共享
工业级的应用程序:计算机资源为你独占商业级应用:应该打造一个弹性系统,以便跟其他开发商的应用程序共存,共同发挥整个计算机的性能
工业级应用:应该打造一个刚性系统,只管你的应用程序稳定,不管别的开发商应用程序的死活
你的建议很精彩,能结识一下吗? [email protected]
和楼主同样的处境,
真的感觉:做一个系统很容易,但做一个可以长时间稳定运行的后台系统太难了,
我的一个系统由于有多个处理模块构成,稳定性让我焦头烂额