stringstream 可以有多长?

use*_*921 5 c++ logging visual-studio c++11

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

为了避免延迟,我尝试将函数的日志(可能很大,并且可能超过 300000+ 日志行,因为该函数做了一些大量的计算)写入 std::stringstream 中,最后将其刷新到文件中。

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

蒂亚!

Lig*_*ica 3

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

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

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

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

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

但从根本上讲,批量冲洗是有意义的,因此您的整体设计听起来不错。