c++ - stringstream 可以有多长?
问题描述
在 Visual Studio C++11 中处理一个大项目。
为了避免延迟,我尝试将函数的日志(可能很大,并且可以超过 300000+ 日志行,因为该函数进行了一些广泛的计算)到 std::stringstream 中,最后将其刷新到文件中。
我想做的事是坏事吗?有什么我可以做得更好的吗?这是因为我不想每次写日志时都将其刷新到文件中。
蒂亚!
解决方案
归根结底,这里的限制只是程序可用存储空间中的空间量,这实际上是系统上的备用内存量(RAM、交换等)。
stringstream 的性能会随着其“内容”的增长而有所下降,因为调整缓冲区的大小需要复制其内容,而当内容更多时,这会变慢。您还可能存在系统内存池碎片化的风险。从您的描述中很难知道这是否是一个因素(行数在这里并不重要;字节数是)。
根据日志填满的速度,我会考虑更频繁地刷新文件,以便:
- 此操作本身相对较快,每次您执行此操作时,并且
- 你利用了操作系统自己非常聪明的缓冲算法,并且
- 你利用了硬盘驱动器自己非常聪明的缓冲算法
因为刻意避开所有成熟的技术没有多大意义。
不过,从根本上说,分批冲洗是有意义的,因此您的整体设计听起来还不错。
推荐阅读
- node.js - Xero API 403 - AuthenticationUnsuccessful 错误
- postgresql - 从 EC2 到 RDS 运行缓慢的 postgres11 逻辑复制
- python - 平铺python游戏(pygame)
- css - 如何突出显示未悬停在悬停上的 div
- nginx - Nginx 目录列表仅用于子路径
- email - Umbraco - 当编辑创建内容时向管理员发送电子邮件通知
- html - 需要帮助理解为什么 css cursor:pointer; 适用于某些元素而不适用于其他元素
- c++ - 1 到 10000 之间的回文数
- javascript - 仅显示那些不在反应中的另一个数组中的元素
- ruby - 如何在我的 Ruby 代码中修复这个隐式错误