MessageBox的缺点

做了一个可以导入数据文件的程序,客户打电话来说处理的文件超过50个左右时,会发生死机现象。但是我这里试验,上百个文件都没有问题。这就很奇怪了。

经过详细询问,得知客户使用的是98系统,估计配置也不怎么样。但是有一点值得注意,由于数据文件是不断有新的进来处理,所以他们用了导入后删除的功能。最后实在没有办法,动态调试。结果发现,不知道谁在里面放了个MessageBox,导入完毕以后显示一个对话框,提示被删除的文件名。而问题的根源正是这个MsgBox!

经过调试发现,当文件在600个左右的时候,文件名列表可以达到21k……然后我用的赛扬2.4就开始抽风……

归根结底,这是对msgbox的不当使用。

幸好手头有份MessageBox的代码,就看了看,没有发现什么奇怪的地方。除了有几个LocalAlloc,MBToWCS可能是问题所在以外就没有什么可疑之处了。

那么,请出flydbg(偶兄弟的修改作品,嘿嘿……),按照源代码开始跟踪。一直跟到实际绘图的函数前面,都没有什么异常。而LocalAlloc,MBToWCS已经全部过掉了。再往下……DrawTextExW,顿住了!看来问题就在这里。21k的东西,一次性用Draw画上来……在我的机器上,6k的东西要1分20秒左右,确实有点慢。客户的机器当然远远不如我用的,当然会以为是死机!

本来想用线程写个改进版,但一想不实际。毕竟这玩意只是拿来提示少量信息的。那位用这个东西显示列表的老兄还真是不一般地强。

其实我一开始还用过syser和windbg,但是实在不顺手……还是olly最好。顺便给偶兄弟的flydbg做个广告。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值