【求助】大数组循环 各位: 俺最近写个程序,要对文本文件里面的指定关键字进行替换。我的处理思路是利用 CStdioFile 打开文件,依次读取每一行;每一行再去循环关键字进行替换。现在的问题是:这些关键字有 2000 多个,我放在 CStringArray 里面,每读取一行就要循环 2000 多次,效率不是很高。虽然采用了多线程,但是还是经常造成线程假死,各位有什么好办法么? 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CMap<int, int, CString, CString> mapKeywordsMap;呵呵,试过了,不过这个 map 太大了,2000 多行,即使是个空的,啥都不做,仅仅 Sleep(1) 也要好久。唉,郁闷for (int i = 0; i < mapKeywordsMap.GetSize(); i++){ //其他的事情 Sleep(1);} 好像lz对akirya的回答理解有误,CMap的定义应该是CMap<CString,CString,bool,bool>因为这样才能利用CMap对关键词的排序搜索加速.如果lz真的要提高效率,建议采用双层map(对不起,我一般都用stl的map,对CMAP基本没用过)将关键词的第一个汉字或字符放入第一层map,其值是二层map,因为关键词不会经常动态变化,在数量较大的情况下应该可以提高速度.可以定义为:std::map<wstring,std::map<wstring,bool> >还有一个建议,文件可以一次读入,然后在内存中分析,每次读一行对IO是一种浪费 多线程的处理,我觉得应该放在对来源分析上,而不是对关键词的定位上你可以将读入的10000行文本,分成5个线程,每个线程负责处理2000行,由于行间没有替换依赖关系,可独立查找替换,因此适用多线程.由于关键词map可以作为一次建立,然后以常量查找的方式使用,stl的map是线程安全的,可以在多个线程中安全常量式使用同一个关键词双层map还有引入map的好处就是为了利用其关键词查找算法,因为for循环是不应该使用的,应该用map的find(关键词)的方式 求OLE操作Excel sheets.add函数的详细用法 一个古怪的问题,自定义resource ID与MFC默认resource ID的ID号重复了。 调用主页面的串口接收事件OnComm 用API做一个窗口 Winsock数据传输!!!求助!!! windows.h和winsock2.h两个头文件的冲突,谢谢了 求救:CPropertySheet的问题 ftp客户端:如何在空闲时候维持网络连接? 请问CALLBACK是干什么用的? 请问有没有做电力系统方面开发的? 请问vc 培训那个IT培训机构最好? VC 编译gloox的问题
呵呵,试过了,不过这个 map 太大了,2000 多行,即使是个空的,
啥都不做,仅仅 Sleep(1) 也要好久。
唉,郁闷
for (int i = 0; i < mapKeywordsMap.GetSize(); i++)
{
//其他的事情
Sleep(1);
}
CMap<CString,CString,bool,bool>
因为这样才能利用CMap对关键词的排序搜索加速.如果lz真的要提高效率,建议采用双层map(对不起,我一般都用stl的map,对CMAP基本没用过)
将关键词的第一个汉字或字符放入第一层map,其值是二层map,因为关键词不会经常动态变化,在数量较大的情况下应该可以提高速度.
可以定义为:
std::map<wstring,std::map<wstring,bool> >
还有一个建议,文件可以一次读入,然后在内存中分析,每次读一行对IO是一种浪费