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 追加太慢?的主要内容,如果未能解决你的问题,请参考以下文章