我需要用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 ++中做错了什么?
答案 0 :(得分:2)
首先,您在使用slice
做什么?
有可能C#版本正在读取字符串然后丢弃它 - 而c#JIT正在将其优化为无操作,因此0.6秒只需初始化和退出。 C ++版本将生成用于读取字符串的代码,因此它实际上正在处理输入文件。如果要比较性能,请确保C ++版本是使用Release设置构建的,调试代码对于perf是没有意义的。
对字符串执行某些操作,您会看到不同的性能数据,并检查两个系统中的内存使用情况,C#将耗尽更多RAM,直到GC启动。