我有这样的代码:
public bool Set(IEnumerable<WhiteForest.Common.Entities.Projections.RequestProjection> requests)
{
var documentSession = _documentStore.OpenSession();
//{
try
{
foreach (var request in requests)
{
documentSession.Store(request);
}
//requests.AsParallel().ForAll(x => documentSession.Store(x));
documentSession.SaveChanges();
documentSession.Dispose();
return true;
}
catch (Exception e)
{
_log.LogDebug("Exception in RavenRequstRepository - Set. Exception is [{0}]", e.ToString());
return false;
}
//}
}
这段代码被多次调用。在我得到大约 50,000 个通过它的文档后,我得到了 OutOfMemoryException。知道为什么吗?也许过一段时间我需要声明一个新的 DocumentStore ?
谢谢你
**
- 更新:
**
我最终使用 Batch/Patch API 来执行我需要的更新。您可以在此处查看讨论:https ://groups.google.com/d/topic/ravendb/3wRT9c8Y-YE/discussion
基本上因为我只需要更新我的对象上的 1 个属性,并且在考虑了关于将所有对象重新序列化回 JSON 的ayendes 评论之后,我做了这样的事情:
internal void Patch()
{
List<string> docIds = new List<string>() { "596548a7-61ef-4465-95bc-b651079f4888", "cbbca8d5-be45-4e0d-91cf-f4129e13e65e" };
using (var session = _documentStore.OpenSession())
{
session.Advanced.DatabaseCommands.Batch(GenerateCommands(docIds));
}
}
private List<ICommandData> GenerateCommands(List<string> docIds )
{
List<ICommandData> retList = new List<ICommandData>();
foreach (var item in docIds)
{
retList.Add(new PatchCommandData()
{
Key = item,
Patches = new[] { new Raven.Abstractions.Data.PatchRequest () {
Name = "Processed",
Type = Raven.Abstractions.Data.PatchCommandType.Set,
Value = new RavenJValue(true)
}}});
}
return retList;
}
希望这可以帮助 ...
非常感谢。