首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stringstream可以有多长?

stringstream可以有多长?
EN

Stack Overflow用户
提问于 2018-05-09 18:18:23
回答 2查看 410关注 0票数 4

在Visual Studio C++11中处理一个大项目。

为了避免延迟,我尝试将一个函数的日志写入std::300000+流,最后将其刷新到一个文件中。

我想做的是一件坏事吗?有什么我可以做得更好的吗?这是因为我不想在每次写入日志时都将其刷新到一个文件中。

蒂娅!

EN

回答 2

Stack Overflow用户

发布于 2018-05-09 18:26:00

最终,这里的约束是程序的空闲存储中的空间量,这实际上是系统上的空闲内存量(RAM、交换空间等等)。

stringstream的性能将随着其“内容”的增长而有所下降,因为调整缓冲区大小需要复制其内容,而当有更多内容时,这会更慢。您还有可能使系统的内存池碎片化。从你的描述中很难知道这是否是一个因素(行数在这里并不重要,字节数才是)。

根据日志填充的速度,我会考虑更频繁地刷新文件,以便:

  • 这个操作本身是比较快的,每次你这样做的时候,
  • 你会利用操作系统自己非常聪明的缓冲算法,
  • 你会利用硬盘自己非常聪明的缓冲算法

因为故意避开所有这些成熟的技术是没有多大意义的。

不过,从根本上说,批量刷新是有意义的,因此您的整体设计听起来不错。

票数 3
EN

Stack Overflow用户

发布于 2018-05-09 18:30:44

std::stringstreamstd::string的包装器,因此限制将是std::string::max_size(),这取决于系统/实现。

我会更频繁地尝试刷新(不一定每次您想要写一行代码时),只有在性能分析显示出显着的代价时才进行优化。

还要记住,日志的目的通常是提供有用的调试信息。如果你的程序崩溃了,没有任何东西被刷新,那么它不会给你带来任何好处。应该在每一行之后刷新和从不刷新之间进行权衡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50250924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档