std::string 追加太慢?

Posted

技术标签:

【中文标题】std::string 追加太慢?【英文标题】:std::string append too slow? 【发布时间】:2010-09-06 08:42:59 【问题描述】:

我有一种情况,我从结构中读取数据并不断将其附加到字符串中,以便可以通过套接字发送。当数据相当大时,此操作会花费大量时间。有人可以提出任何替代方案吗?

我有一个结构

结构文件信息 int 文件 ID; 字符文件名[16]; 双标签;

我做了一个 std::stringstream >>file_id 和 stringstream.str() 这对每个值重复,附加到一个字符串并发送

【问题讨论】:

您发布的内容是从stringstream 阅读,而不是写作。那里没有发生附加。 【参考方案1】:

<sstream> 中的std::ostringstream 正是为这种操作模式而设计的。

ostringstream my_text;
my_text << "hello " << 2 << foo << endl; // efficiently catenate

socket.send( my_text.str() ); // get a std::string to handle data

【讨论】:

【参考方案2】:

也许您应该单独发送字符串。如果你有一个流式套接字,这应该不会影响另一端接收数据的方式。

【讨论】:

你的意思是,不是追加,而是发送? @Rajesh:他的意思是,如果 I/O 是本地缓冲的,那么不用担心自己缓冲它。我猜套接字没有缓冲,因为大多数都没有。【参考方案3】:

一种选择是使用std::stringstream。只有提供更具体的信息,才能提供更具体的帮助。你在传输什么样的数据?数据块有多大?

【讨论】:

这就是我使用的。我将结构值读入字符串流,然后执行 .str() 来获取字符串。我可以直接发送字符串流吗? @Rajesh:你说你使用string,而不是stringstream。它们具有不同的附加运行时特性,因此这是一个相当重要的区别。是什么让你说stringstream 很慢?探查器具体指向什么? 我确实使用了一个字符串...我将 stringstream.str 附加到一个字符串然后发送【参考方案4】:

如果您可以粗略估计字符串的大小,您可以先使用 std::string::reserve() 以避免以后进行多余的重新分配。

【讨论】:

以上是关于std::string 追加太慢?的主要内容,如果未能解决你的问题,请参考以下文章

解决GitHub下载速度太慢的问题

pandas读取和写入excel,csv太慢怎么办

jQuery追加内容

jquery 元素控制(追加元素/追加内容)

C#写入追加数据

Jquery - 追加与追加