在Visual Studio C++11中处理一个大项目。
为了避免延迟,我尝试将一个函数的日志写入std::300000+流,最后将其刷新到一个文件中。
我想做的是一件坏事吗?有什么我可以做得更好的吗?这是因为我不想在每次写入日志时都将其刷新到一个文件中。
蒂娅!
发布于 2018-05-09 18:26:00
最终,这里的约束是程序的空闲存储中的空间量,这实际上是系统上的空闲内存量(RAM、交换空间等等)。
stringstream的性能将随着其“内容”的增长而有所下降,因为调整缓冲区大小需要复制其内容,而当有更多内容时,这会更慢。您还有可能使系统的内存池碎片化。从你的描述中很难知道这是否是一个因素(行数在这里并不重要,字节数才是)。
根据日志填充的速度,我会考虑更频繁地刷新文件,以便:
因为故意避开所有这些成熟的技术是没有多大意义的。
不过,从根本上说,批量刷新是有意义的,因此您的整体设计听起来不错。
发布于 2018-05-09 18:30:44
std::stringstream是std::string的包装器,因此限制将是std::string::max_size(),这取决于系统/实现。
我会更频繁地尝试刷新(不一定每次您想要写一行代码时),只有在性能分析显示出显着的代价时才进行优化。
还要记住,日志的目的通常是提供有用的调试信息。如果你的程序崩溃了,没有任何东西被刷新,那么它不会给你带来任何好处。应该在每一行之后刷新和从不刷新之间进行权衡。
https://stackoverflow.com/questions/50250924
复制相似问题