2

openGl 三角形メッシュを取得して 3ds ファイルに変換するメソッドがあります。このメソッドは と呼ばれexportShape()ます。この変換を実行するexportShape()には、大量の非常に大きなベクトルと hash_maps が作成されます。exportShape()現在、 が呼び出されたコードの最後の行から次の行に移動するexportShape()には、最大で 5 分かかる場合があります。すべてのローカル ベクトルと hash_maps をグローバル スコープに移動すると、予想どおりメソッドが即座に存在するため、ローカル変数の非常に大きなスタックを空にするために、このすべての時間が費やされていると確信しています。

これらすべてのローカル データ構造をわずか数秒で設定できるのに、スタックからポップするには数分かかるのはなぜですか? exportShape()スタックを残してクリアするプロセスを最適化するにはどうすればよいですか?

編集:

削除されるオブジェクトには、文字列、double、および int のみが含まれ、カスタム デストラクタは含まれません。

私は自分の問題をかなり解決しました。リリース モードで実行すると、パフォーマンスが大幅に向上します (最大 20 倍)。それでも、プロセスはまだ数秒間ハングします。他にできることはありますか?

4

1 に答える 1

1

0xfdfdfdfd最初の問題は、解放されたメモリへのアクセスを検出するために、解放されたメモリをビット パターン (例: ) でマークするデバッグ アロケータを使用していることです。解放されたすべてのメモリを反復処理する必要があるため、これには明らかに時間がかかります。

さらに高速化するには、 Boost Pool Libraryなどのスコープ付きアロケーターを使用できます。範囲指定されたカスタム メモリ プール/アロケータを作成するも参照してください。

于 2012-12-11T16:59:12.250 に答える