我目前正在研究一些將複雜CGAL對象實例轉移到不同進程的方法。在另一篇文章中,我問過關於自定義分配器的問題,但另一種方法是串流。 (FYI共享存儲器不是一個選項)如何將二進制流替換爲字符串流,以避免投射?
當前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。我想理想的情況是,我希望能夠提供一個流,當被要求流(無論哪種方式),它在二進制。
感激地收到任何幫助。
馬科斯
+1分析。如果真正的類型轉換正在進行,那可能需要一些時間,但是除非您測量它,否則您不知道這是真正的問題。簡單類型轉換本身只是對編譯器的建議,不應該對性能產生任何影響。 – Caleb