我正在逐行循环遍历一系列CSV文件。对于每一行,我创建一个BSONObjBuilder对象,然后将builder.obj()添加到std :: vector ...每10k行我将向量插入数据库然后清除向量
mdb.insert(collection, myvector);
myvector.clear()
每个CSV文件中有数百万行。我注意到mongod进程占用了越来越多的RAM ....直到最终内存使用量达到100%
PID USER PR NT VIRT RES SHR S %CPU %MEM
4450 mongod 15 0 73.2g 34g 33g S 45.7 97.0 3848:30 mongod
这里发生了什么?在我看来,有一个内存泄漏?我的代码中肯定没有内存泄漏。
答案 0 :(得分:1)
当您致电clear
时,它会清除元素,但可能不会降低容量。
已经回答here
旧的skool;
std::vector<T>(v).swap(v);
请注意,C ++ 11有shrink_to_fit
可能会有所帮助,但可能无效。