我正在为我们的数据创建工具,从我们的SQL Server数据库中使用Entity Framework读取数据,并在MongoDB数据库中逐行插入。
在我的代码中,我以这种方式开始:
_client = new MongoClient();
_database = _client.GetDatabase("isovtest");
然后,在我的SQL Server表上有一个循环
foreach (var erog in db.transactions)
我为每条记录创建一个Bson文档。
document = new BsonDocument{....}
最后我插入它:
_database.GetCollection<BsonDocument>("transactions").InsertOne(document);
我的问题是源表很大,有数百万条记录。在大约400K之后,它每次都会崩溃,因为它内存不足(我的RAM占用了大约1.6 GB:在此大小的情况下它会崩溃,如果仍然有空闲内存的话)。
我认为问题是指令
_database.GetCollection<BsonDocument>("transactions").InsertOne(document);
因为,使用 GetCollection ,它会检索所有数据,每次循环都会获得一个种植者集合。
我试着在循环结束时添加:
document = null;
GC.Collect();
但没有改变。
那么,你能否告诉我是否存在另一种在不使用 GetCollection 方法的情况下在MongoDB集合中插入文档的方法?如果没有,怎么可以避免内存问题?