Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串附加太慢?_C++ - Fatal编程技术网

C++ 字符串附加太慢?

C++ 字符串附加太慢?,c++,C++,我有这样一种情况:我从结构中读取数据,并不断将其追加到字符串中,以便通过套接字发送数据。当数据相当大时,此操作将花费大量时间。有人能提出其他的建议吗 我有一个结构 结构文件信息 { int文件标识; 字符文件名[16]; 双标签; } 我执行std::stringstream>>文件\u id和stringstream.str 对每个值重复此操作,将其附加到字符串并发送也许您应该单独发送字符串。如果您有一个流式套接字,这应该不会影响另一端接收数据的方式。也许您应该单独发送字符串。如果您有一个流式

我有这样一种情况:我从结构中读取数据,并不断将其追加到字符串中,以便通过套接字发送数据。当数据相当大时,此操作将花费大量时间。有人能提出其他的建议吗

我有一个结构

结构文件信息 { 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中读取,而不是写入。那里没有发生附加事件。