함수가 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 36 B의 db.The 길이 약 300,000 레코드가 한 필드에 피사체의 값은 0 내지 20. 그래서 크기 범위 숫자이다
요소는 40B입니다. 따라서 내 의견으로는, m_category의 크기는 다음과 같습니다. 40 * 300000 = 120,00,000 = 12M 그러나 12M은 1.2G보다 훨씬 적습니다! 왜? 저는 명령 top과 RES를 사용하여 프로세스의 메모리를 봅니다. 지도 요소의 메모리를 계산하는 방법은 무엇입니까?
'리셋'컨테이너는 얼마만큼의 메모리를 사용합니까? – GWW
"SELECT * FROM info"- 이유가 무엇입니까? 왜 모든 것을 선택하고 적절한 "WHERE"절을 추가하는 대신 응용 프로그램에서 처리하고 데이터베이스가 결과 집합을 전송하기 전에 범위를 좁히는 이유는 무엇입니까? –
왜 'circleId'와'category'를 사용하고 있습니까? –