测试csv文件读写100次
结果: 93ms - 110 ms csv大小4110000字符。3.92Mb。
结论:可以更快。
//测试文件读写 100次
std::filebuf buf;
CString time = _T("");
if (buf.open("X:/Users/user/Desktop/000008.csv", std::ios::binary | std::ios::in))
{
std::istream is(&buf);
for (int i = 0; i < 100; i++)
{
time += ReadCsv(is) + _T(" ");
}
}
CString CReqMonitorTabHQ::ReadCsv(std::istream& pStream)
{
pStream.seekg(0, std::ios::end);
std::streamsize fileLength = pStream.tellg();
pStream.seekg(0, std::ios::beg);
const std::streamsize bufLength = 64 * 1024;
std::vector<char> buffer(bufLength);
std::vector<std::string> row;
std::vector<std::vector<std::string>> allRow;
std::string cell;
bool quoted = false;
int cr = 0;
int lf = 0;
DWORD time_start, time_end;
time_start = GetTickCount64();
while (fileLength > 0)
{
std::streamsize readLength = min(fileLength, bufLength);
pStream.read(buffer.data(), readLength);
for (int i = 0; i < readLength; ++i)
{
if (buffer[i] == ',')
{
row.push_back(cell);
cell.clear();
}
else if (buffer[i] == '\r')
{
++lf;
row.push_back(cell);
cell.clear();
allRow.push_back(row);
row.clear();
}
else
{
cell += buffer[i];
}
}
fileLength -= readLength;
}
time_end = GetTickCount64();
CString time;
time.Format(_T("%dms"), time_end - time_start);
return time;
}
代码参考链接:https://blog.csdn.net/qq_30094523/article/details/101674635
https://www.zhihu.com/tardis/zm/art/365268763?source_id=1005