Windows中的PostMessage和SendMessage造成的程序性能低下

在处理大数据的背景下,通过对比发现PostMessage与SendMessage在多线程环境中性能差异显著。PostMessage作为异步消息,避免了线程切换的开销,提升了20%的性能。然而,使用PostMessage时需注意消息参数的生命周期,确保在消息被处理时参数仍然有效。此外,还提及了Windows系统中消息队列的限制和如何调整该限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始要处理大数据,大约有百G的地理道路数据文件,按照网格来切分生成地图数据。

普通情况下:

(1)单机运行时间太长,性能低
(2)内存不够

(3)本身算法是否可以改进

(4)C++程序写的性能问题,使用的是MFC框架,大量CString对象构建;频繁的 new/delete过程;多线程(对于纯计算类,多线程意义不大,多核并行似乎更合适)

 

-----------------------------------------------------

今天,发现,sendmessage在多线程中比postmessage耗时不在一个数量级上!去掉,就能提搞20%的性能.

 

PostMessage和SendMessage的区别:

PostMessage一个属于异步消息,并不等待消息处理,直接返回继续处理;因此,当多线程时,要比SendMessage快,SendMessage需要2次线程切换,才能继续,因此同步开销很大

另外,PostMessage的参数,必须注意到:

不是立即释放的局部变量,否则,当消息处理时,LPARAM指针指向的内容可能已经不存在或者发生改变。

CHAR szText[100]

 

PostMessage(XXX,NULL,szText);

 

--------------------------------------

当消息出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值