每5分钟执行一次功能。如果功能正在进行中,则进程的内存将达到1.2G!如果删除该功能,内存将约为20M。功能是:
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.
}
db中有大约300,000条记录。字段id的长度约为36 B,字段主题的值是0到20之间的数字。因此元素的大小为40 B. 因此,在我看来,m_category的大小是: 40 * 300000 = 120,00,000 = 12M 但12M远小于1.2G!为什么? 顺便说一句,我使用命令top和RES来查看进程的内存。 如何计算地图元素的记忆?
答案 0 :(得分:0)
总结其他人在上面评论过的内容。你的问题的答案是:你有内存泄漏。并且它不在您的函数中,它位于您未能在此处发布的MysqlData类中。因此,如果您需要进一步的帮助,您必须向我们所有人提供所有信息。