c++ - stringstream 可以有多长?

标签 c++ visual-studio c++11 logging

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

为了避免延迟,我试图将一个函数的日志(它可能很大并且可以超过 300000+ 日志行,因为该函数进行了一些广泛的计算)写入 std::stringstream 并最终将其刷新到一个文件。

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

提亚!

最佳答案

最终,这里的限制只是您程序的空闲存储区中的空间量,这实际上是您系统上的备用内存量(RAM、交换空间等)。

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

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

  • 此操作本身相对较快,每次您都这样做,并且
  • 你利用操作系统自己非常聪明的缓冲算法,并且
  • 你利用了硬盘自身非常聪明的缓冲算法

因为刻意避免所有那些成熟的技术没有多大意义。

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

关于c++ - stringstream 可以有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250924/

相关文章:

c++ - 在 Windows 上使用 C++ 获取当前用户名

c++ - 在 64 位 int 中设置位

visual-studio - FxCop/StyleCop 是否可以仅限于使用 Visual Studio 分析选定的方法?

c++ - 使用 chrono 获取当前日期

c++ - 为什么我可以在私有(private)类型上使用 auto?

c++ - 如何从整个磁盘中排除要挂载的一个文件

c# - 最新 windows 10 更新后 Visual Studio 2013 发布崩溃

visual-studio - Visual Studio 中编辑器选项卡窗口的顺序是什么

c++ - 通用统一初始化 : `double` to `int`

c++ - 跟踪 boolean 数据