Eine Funktion wird alle 5 min ausgeführt. Wenn die Funktion in dem Prozess ist, wird der Speicher des Prozesses 1.2G erreichen! Wenn die Funktion entfernt wird, beträgt der Speicher etwa 20M. Die Funktion ist:berechnen Sie den Speicher von C++ Karte
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.
}
Es gibt etwa 300.000 Datensätze in der db.The Länge des Feldes ID 36 zu B, und der Wert des Feldes Thema ist eine Ziffer, die also die Größe von 0 bis 20 reicht Element ist 40 B. So ist meiner Meinung nach die Größe von m_category: 40 * 300000 = 120,00,000 = 12M Aber 12M ist viel weniger als 1,2G! Warum? BTW, ich benutze den Befehl oben und die RES, um den Speicher des Prozesses zu sehen. Wie berechnet man den Speicher der Kartenelemente?
Wie viel Speicher verwendet der 'reset'-Container? – GWW
"SELECT * FROM info" - Warum? Warum sollten Sie alles auswählen und in der Anwendung verarbeiten, anstatt die entsprechende "WHERE" -Klausel hinzuzufügen und die Datenbank die Ergebnismenge vor der Übertragung eingrenzen zu lassen? –
Warum benutzen Sie überhaupt 'circleId' und' category'? Setzen Sie einfach die Karte direkt 'temp [rset [i] [" id "]] = ...' –