我有這樣的代碼:烏鴉DB DocumentStore - 拋出內存異常
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?
謝謝
**
- UPDATE:
**
我結束了使用批處理/補丁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;
}
希望這有助於...
非常感謝。
謝謝! - 這可能是要走的路 – JanivZ 2012-04-08 05:54:21