使用Visual Studio C ++ 11中的大项目。
为了避免延迟,我试图将函数的日志(可能是巨大的,并且可以超出300000+以上的日志行,因为函数进行了一些大量的计算)到std :: stringstream并最终将其刷新为文件。
我想做什么坏事?有什么我可以做得更好吗?这是因为每次我想写日志时我都不想将它刷新到文件中。
蒂亚!
答案 0 :(得分:3)
最终,这里的约束只是程序的免费存储空间量,这实际上是系统上的备用内存量(RAM,交换,等等)。
随着“内容”的增长,stringstream的性能会有所下降,因为调整缓冲区大小需要复制其内容,而当内容更多时,这会慢一些。您还可能会破坏系统内存池的碎片。很难从你的描述中知道这是否是一个因素(这里的行数并不重要; bytes 的数量是)。
根据日志填满的速度,我会考虑更频繁地刷新文件,以便:
从根本上说,分批冲洗是有道理的,所以你的整体设计听起来还不错。
答案 1 :(得分:1)
std::stringstream
是std::string
的包装,因此限制为std::string::max_size()
,这取决于系统/实现。
我会更频繁地尝试刷新(不一定每次都想写一行),只有在分析显示重大损失时才进行优化。
还要记住,日志的目的通常是提供有用的调试信息。如果您的程序崩溃并且没有任何内容被刷新,那么它什么也得不到。在每一行之后冲洗和从不这样做之间应该进行权衡。