関数は5分ごとに実行されます。関数がプロセス内にある場合、プロセスのメモリは1.2Gに達します!機能を削除すると、メモリは約20Mになります。関数は、次のとおりC++マップのメモリを計算する
string sql = "SELECT * FROM info";
MysqlData rset = mysql.queryRecord(sql);
map<string, int> temp;
for (size_t i = 0; i < rset.size(); i++) {
const string& circleId = rset[i]["id"];
const int category = strto<int>(rset[i]["subject"]);
temp[circleId] = category;
}
if (!temp.empty()) {
m_category.swap(temp); //m_category is global variable.
}
ありフィールドIDのdb.The長さで約300,000レコード約36 Bであり、そしてフィールド対象の値が大きさのだから、0から20の範囲の数字であります要素が40Bです。 したがって、m_categoryのサイズは、 です。40 * 300000 = 120,00,000 = 12M しかし、12Mは1.2Gよりもはるかに小さいです!どうして? ところで、私はtopコマンドとRESコマンドを使ってプロセスのメモリを見ます。 マップ要素のメモリを計算するにはどうすればよいですか?
'reset'コンテナはどれくらいのメモリを使用していますか? – GWW
"SELECT * FROM info" - なぜですか?適切な「WHERE」節を追加するのではなく、アプリケーションですべてを選択して処理し、データベースに結果セットを絞り込んで送信させるのはなぜですか? –
なぜ 'circleId'と' category'を使っていますか? –