Я пытаюсь перенести данные из базы данных Microsoft SQL в Elasticsearch. Я использую EF 6 для создания моделей (первый код из базы данных) и NEST для сериализации объектов в Elasticsearch.C# Сериализация больших наборов данных
Если я использую Lazy loading, он работает нормально, но невероятно медленно (так медленно его нельзя использовать). Если я переключаюсь на жадную загрузку, добавив следующую строку:
public MyContext() : base("name=MyContext")
{
this.Configuration.LazyLoadingEnabled = false;
}
И Сериализация так:
ElasticClient client = new ElasticClient(settings);
var allObjects = context.objects
.Include("item1")
.Include("item2")
.Include("item2.item1")
.Include("item2.item1.item");
client.IndexMany(allObjects);
Я в конечном итоге получить System.OutOfMemoryException, прежде чем Сериализация происходит (так просто путем загрузки данные). У меня около 2,5 ГБ доступной памяти, и мы говорим о 110 000 элементов в базе данных.
Я попытался Сортировка данных, а затем использование Пропустить и принять только Сериалировать определенное количество объектов за раз, однако мне удалось получить 60 000 объектов, вставленных в Elasticsearch, до окончания работы. Похоже, что сборщик мусора не освобождает достаточно памяти, даже если я действительно назвал это явно после вставки определенного количества объектов в Elasticsearch.
Есть ли способ для загрузки нагрузки определенного количества объектов? Или другой подход к сериализации больших наборов данных?
Отъезд 'GC.AddMemoryPressure()' – Sam
Благодарим за подсказку. К сожалению, это не влияет на использование памяти в моем приложении. – andreasnauta