0

我目前正在研究一些将复杂的 CGAL 对象实例传输到不同进程的方法。在另一篇文章中,我询问了自定义分配器,但另一种方法是字符串流。(仅供参考,共享内存不是一种选择)

当前的 CGAL::Nef_polyhedron_3 提供 iostreaming:

// In main process
Nef_polyhedron_3 NP3;
stringstream ss;
ss << NP3;
sendToOtherProcess(ss.str());

// In separate process
stringstream ss(stringFromOtherProcess);
Nef_polyhedron_3 NP3;
ss >> NP3;

现在,输出流很慢,输入流慢了四倍。

原因是(我猜)是所有的演员。可以在这里找到执行它的类:https ://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h

只取类成员之一的片段(ln 1481):

  in >> hx >> hy >> hz >> hw;
  vh->point() = Point_3(hx,hy,hz,hw);

为数千个点执行此操作需要一段时间。在输出端它更快(不知道为什么)

有什么办法可以提供某种二进制流,不会做所有的转换?我知道可以使用 read()、write() 写入任何二进制流,但我不能(轻松)更改 CGAL SNC_io_parser.h。我想理想情况下,我希望能够提供一个流,当被要求流式传输(无论哪种方式)时,它都会以二进制形式进行。

感激地收到任何帮助。

马科斯

4

1 回答 1

1

原因是(我猜)是所有的演员......为数千分做这件事需要一段时间。在输出端它更快(不知道为什么)

您可能希望在分析器下运行它,以便能够确定地知道时间花在了哪里。

有什么办法可以提供某种二进制流,不会做所有的转换?

您正在使用std::ostreamwithoperator<<()std::istreamwithoperator>>()接口,这些接口将算术类型序列化为文本,并且无法更改此行为。

您可以复制 的序列化函数Nef_polyhedron_3并使它们接受其他一些可以序列化为二进制格式的流类型。

于 2013-03-28T15:06:38.503 回答