首页 > 解决方案 > stringstream 可以有多长?

问题描述

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

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

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

蒂亚!

标签: c++visual-studioc++11logging

解决方案


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

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

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

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

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

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


推荐阅读