C++ 字符串附加太慢?
我有这样一种情况:我从结构中读取数据,并不断将其追加到字符串中,以便通过套接字发送数据。当数据相当大时,此操作将花费大量时间。有人能提出其他的建议吗 我有一个结构 结构文件信息 { int文件标识; 字符文件名[16]; 双标签; } 我执行std::stringstream>>文件\u id和stringstream.strC++ 字符串附加太慢?,c++,C++,我有这样一种情况:我从结构中读取数据,并不断将其追加到字符串中,以便通过套接字发送数据。当数据相当大时,此操作将花费大量时间。有人能提出其他的建议吗 我有一个结构 结构文件信息 { int文件标识; 字符文件名[16]; 双标签; } 我执行std::stringstream>>文件\u id和stringstream.str 对每个值重复此操作,将其附加到字符串并发送也许您应该单独发送字符串。如果您有一个流式套接字,这应该不会影响另一端接收数据的方式。也许您应该单独发送字符串。如果您有一个流式
对每个值重复此操作,将其附加到字符串并发送也许您应该单独发送字符串。如果您有一个流式套接字,这应该不会影响另一端接收数据的方式。也许您应该单独发送字符串。如果您有一个流式套接字,这应该不会影响另一端接收数据的方式。一个选项是使用流式套接字。只有提供更具体的信息,才能提供更具体的帮助。您正在流式传输什么样的数据?数据块有多大?一个选择是使用。只有提供更具体的信息,才能提供更具体的帮助。您正在流式传输什么样的数据?数据块有多大?std::ostringstream from正是为这种操作模式而设计的
ostringstream my_text;
my_text << "hello " << 2 << foo << endl; // efficiently catenate
socket.send( my_text.str() ); // get a std::string to handle data
std::ostringstream from正是为这种操作模式而设计的
ostringstream my_text;
my_text << "hello " << 2 << foo << endl; // efficiently catenate
socket.send( my_text.str() ); // get a std::string to handle data
如果可以粗略估计字符串的大小,可以先使用std::string::reserve避免以后进行多余的重新分配。如果可以粗略估计字符串的大小,可以先使用std::string::reserve避免以后进行多余的重新分配。你的意思是,拉杰什:他是说,如果I/O是本地缓冲的,那么就不用担心自己缓冲了。我猜套接字没有缓冲,因为大多数都没有。你的意思是,与其追加,不如发送?@Rajesh:他是说,如果I/O是本地缓冲的,那么你自己就不用担心缓冲了。我猜套接字没有缓冲,因为大多数都没有。这就是我使用的。我将struct值读入stringstream,然后执行.str来获取字符串。我可以直接发送字符串流吗?@Rajesh:你说你用的是字符串,不是字符串流。它们具有不同的附加运行时特征,因此这是一个相当重要的区别。你为什么说stringstream很慢?分析器具体指向什么?我确实使用字符串…我将stringstream.str附加到字符串,然后发送,这就是我使用的。我将struct值读入stringstream,然后执行.str来获取字符串。我可以直接发送字符串流吗?@Rajesh:你说你用的是字符串,不是字符串流。它们具有不同的附加运行时特征,因此这是一个相当重要的区别。你为什么说stringstream很慢?探查器具体指向什么?我使用字符串…我将stringstream.str附加到字符串,然后发送您发布的内容是从stringstream读取,而不是写入。这里没有附加内容。您发布的内容是从stringstream中读取,而不是写入。那里没有发生附加事件。