0

我有运行大量循环更新单个字符串的代码。最后,我希望将该字符串存储在文件中。

目前我正在将该字符串打印到控制台。我可以使用 aofstream并将其写入文件而不是控制台。

  • 而是使用要更新的字符串,直接使用文件流
  • 改用字符串流,最后将该字符串流复制到文件 流并写入文件。
  • 字符串更新完成后,我应该立即编写一个文件流。

std::string::max_size我的编译器中是:4294967257我可以生成的字符串的最大大小大约max_size是编译器的一半。

注意:我使用的是 Solaris Unix。

将此字符串写入文件的最高效方法是什么?

4

3 回答 3

2

只有一种方法可以知道答案。您必须针对您的情况对其进行分析。您可以通过测量生成文件所需的时间来轻松做到这一点。

于 2013-07-18T11:04:45.557 回答
0

尝试使用reserve 和clear 尽可能多地重用相同的std::string 对象。该字符串将缓存其内存分配。每次进入块时,{} 中的字符串都会进行新的分配。

注意隐藏的临时字符串对象,例如当 a 为 std::string 时 a + b 将创建一个具有新分配的临时 std::string 对象。首选 += 连接字符串。

使用 C 代码执行转换。创建一个本地字符缓冲区并使用 sprintf 等。它们比字符串流更快,但更容易出错,所以要小心。

写入文件时使用 "\n" 而不是 std::endl,因为后者会导致刷新。

避免像瘟疫一样的字符串流。它们很慢,至少是 Visual Studio 实现。我已经尝试过使用它们进行核心文本处理,我知道。

当然,这假设性能对您来说是一个问题。如果您正在做轻松的工作,字符串流可能是最简单的解决方案。当我不做核心工作时,我更喜欢它们,因为出现错误的可能性要小得多。

于 2013-07-18T11:16:13.540 回答
0

考虑所有场景并对时间进行基准测试。

注意:最快的将是最接近内存的。

于 2013-07-18T11:08:04.087 回答