与c#相比,c ++文件解析器速度慢

时间:2012-06-05 12:38:44

标签: c++

我需要用c ++编写一个文件解析器。

这是我的代码:

std::string line;       
vector<string> slice;

while(getline(m_inputStream, line))  
{           
}

我的文件很大,所以这个循环需要12秒。

我的c#代码是:

StreamReader sr = new StreamReader(fileName);
string strline = "";

while (!sr.EndOfStream)
{
    strline = sr.ReadLine();
}

这需要0.6秒......我在C ++中做错了什么?

1 个答案:

答案 0 :(得分:2)

首先,您在使用slice做什么?

有可能C#版本正在读取字符串然后丢弃它 - 而c#JIT正在将其优化为无操作,因此0.6秒只需初始化和退出。 C ++版本将生成用于读取字符串的代码,因此它实际上正在处理输入文件。如果要比较性能,请确保C ++版本是使用Release设置构建的,调试代码对于perf是没有意义的。

对字符串执行某些操作,您会看到不同的性能数据,并检查两个系统中的内存使用情况,C#将耗尽更多RAM,直到GC启动。