bjam高速化 その3

文字列をキャッシュしてどれくらい速くなるかのテストとして、文字列リスト(hamigaki::bjam2::string_list)の要素をBoost.Flyweightに差し替えてみました。(参考: wikipedia:Flyweight パターン)

  • まだSVN trunkにコミットされていない
  • キャッシュは静的変数を用いるため、タグを変えない限りキャッシュを分離できない
  • DLLを跨ぐ場合はintermodule_holder(Boost.Interprocessを利用)を使う必要あり

といった問題はあるものの、最小限の修正で大まかなパフォーマンスの確認ができると考え、試してみました。


結果、結構修正が入った上に逆に遅くなりました。
そもそもstring_list自体はCOWを使っているので一度追加してしまえば文字列のコピーはあまり発生せず、逆にflyweightの生成時は一旦stringを作成してからキャッシュにコピーするので、文字列のコピー回数は全然減ってなかったのでした。
おそらく、キャッシュの管理にかかる時間だけ実行時間が増えてしまったのでしょう。
文字列をキャッシュするなら、元の文字列をキャッシュにムーブする形で実装しないと意味がないということですね。
やっぱり自前で作るしかなさそうです。