在 Visual Studio C++11 中处理一个大项目。
为了避免延迟,我试图将一个函数的日志(它可能很大并且可以超过 300000+ 日志行,因为该函数进行了一些广泛的计算)写入 std::stringstream 并最终将其刷新到一个文件。
我想做的是坏事吗?有什么我可以做得更好的吗?这是因为我不想每次想写日志时都将其刷新到文件中。
提亚!
最佳答案
最终,这里的限制只是您程序的空闲存储区中的空间量,这实际上是您系统上的备用内存量(RAM、交换空间等)。
stringstream 的性能会随着其“内容”的增长而有所下降,因为调整缓冲区大小需要复制其内容,而当内容更多时这会变慢。您还可能存在碎片化系统内存池的风险。从您的描述中很难知道这是否是一个因素(此处行数并不重要;字节数 才是)。
根据日志填满的速度,我会考虑更频繁地刷新到文件,以便:
- 此操作本身相对较快,每次您都这样做,并且
- 你利用操作系统自己非常聪明的缓冲算法,并且
- 你利用了硬盘自身非常聪明的缓冲算法
因为刻意避免所有那些成熟的技术没有多大意义。
不过,从根本上说,分批刷新是有意义的,因此您的整体设计听起来不错。
关于c++ - stringstream 可以有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250924/