1

内部に「バケット」のベクトルを持つデータ構造「FileEntry」があり、これらは両方とも共有ポインターとして保存されます。私のファイルエントリポインタが破棄されると、バケットのデストラクタも期待どおりに呼び出され、そこですべてのクリーンアップが行われます。

クリーンアップ操作の時間を計ってパフォーマンス測定を行ったところ、バケット ポインターのクリーンアップには 240 ミリ秒と 202 ミリ秒しかかからなかったのに、ファイルネットリーの完全なクリーンアップには 1768 ミリ秒かかったという奇妙なことがわかりました。

バケットのクリーンアップが完了しました: セッション 240
バケットのクリーンアップが完了しました: ログ 202
fileentry のクリーンアップが完了しました: 1768

私は boost::thread_group を使用します。このグループでバケットがジョブを実行し、両方のバケットが完了すると filenetry がクリアされます。メイン スレッドは、バケット スレッドが完了するまで待機します。

両方のデストラクタのコードは次のとおりです

    FileEntry::~FileEntry()
    {
     Timer timer("Completed cleanup for fileentry");
     this->_buckets.clear();
    }

    Bucket::~Bucket()
    { 
      Timer timer("Completed cleanup for bucket");
      this->_sessions.clear();
      this->_meta_lookup.clear();
      this->_unique_meta.clear();
      this->_writer.reset();
    }

私はここで何をしているのですか?バックグラウンドで何が起こっているかを確認するにはどうすればよいですか?

4

0 に答える 0