今天开始要处理大数据,大约有百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);
--------------------------------------
当消息出来时,这个szText所在的函数已经指向完,其空间已经被回收了,因此,指向了一个不可访问的区域。
当PostMessage发送消息,比处理消息快时,还需要注意消息队列长度:
Windows 2000/XP: There is a limit of 10,000 posted messa