C++性能优化__优化IO

第一,缩短调用链

void stream_read_streambuf(std::istream& f, std::string& result) {
std::stringstream s;
s << f.rdbuf();
std::swap(result, s.str());
}

第二,减少重新分配

void stream_read_string_reserve(std::istream& f,
std::string& result)
{
f.seekg(0,std::istream::end);
std::streamoff len = f.tellg();
f.seekg(0);
if (len > 0)
result.reserve(static_cast<std::string::size_type>(len));
result.assign(std::istreambuf_iterator<char>(f.rdbuf()),
std::istreambuf_iterator<char>());
}

第三,更大的吞吐量——使用更大的输入缓冲区

in8k.open(filename);
char buf[8192];
in8k.rdbuf()->pubsetbuf(buf, sizeof(buf));

第四,更大的吞吐量——一次读取一行

void stream_read_getline(std::istream& f, std::string& result) {
std::string line;
result.clear();
while (getline(f, line))
(result += line) += "\n";
}

第五,再次缩短函数调用链

bool stream_read_string(std::istream& f, std::string& result) {
std::streamoff len = stream_size(f);
if (len == -1)
return false;
result.resize (static_cast<std::string::size_type>(len));
f.read(&result[0], result.length());
return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值