son*_*phi 6 c++ performance stl
我需要处理一个文件列表.不应对同一文件重复处理操作.我用的代码是 -
using namespace std;
vector<File*> gInputFileList; //Can contain duplicates, File has member sFilename
map<string, File*> gProcessedFileList; //Using map to avoid linear search costs
void processFile(File* pFile)
{
File* pProcessedFile = gProcessedFileList[pFile->sFilename];
if(pProcessedFile != NULL)
return; //Already processed
foo(pFile); //foo() is the action to do for each file
gProcessedFileList[pFile->sFilename] = pFile;
}
void main()
{
size_t n= gInputFileList.size(); //Using array syntax (iterator syntax also gives identical performance)
for(size_t i=0; i<n; i++){
processFile(gInputFileList[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但......
我的问题是,当输入大小为1000时,在Windows/Visual Studio 2008 Express上需要30分钟 - 半小时 - .对于相同的输入,在Linux/gcc上运行只需40秒!
可能是什么问题呢?当单独使用时,动作foo()只需很短的时间即可执行.我应该使用像vector :: reserve这样的地图吗?
编辑,额外信息
foo()的作用是:1.它打开文件2.将其读入内存3.关闭文件4.解析内存中文件的内容5.它构建一个令牌列表; 我正在使用矢量.
每当我打破程序时(使用1000+文件输入集运行程序时):调用堆栈显示程序位于std :: vector add的中间.
Did*_*set 18
在Microsoft Visual Studio中,访问标准C++库时存在全局锁定,以防止在Debug构建中出现多线程问题.这可能导致大的性能命中.例如,我们的完整测试代码在50分钟内在Linux/gcc上运行,而在Windows VC++ 2008上则需要5个小时.请注意,使用非调试Visual C++运行时在发布模式下进行编译时,此性能命中不存在.
归档时间: |
|
查看次数: |
2029 次 |
最近记录: |