Я пытаюсь раскрыть некоторые сущности с помощью службы данных WCF. Мои таблицы содержат огромное количество данных, и запросы могут легко вернуть 50 000 записей. У меня есть надстройка Excel, которая подключается к этой службе и помогает пользователям импортировать данные из службы в свои таблицы Excel.
Мой код клиента выглядит примерно так:
UTF8Encoding utf8Encoding = new UTF8Encoding();
Entities plDataEntities = new Entities(new Uri(@"http://localhost/AdoNetDataService.svc/"));
int recordCount = 0;
var apples = (from a mada in plDataEntities.Apples select a).Take(50 * 1000);
using (var fileStream = new FileStream(@"C:\Apples.txt", FileMode.Create))
{
foreach (Apple apple in apples)
{
var description = getAppleDescription(apples);
byte[] bytes = utf8Encoding.GetBytes(description);
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Flush();
recordCount++;
}
}
Я думал, что сервис будет обслуживать эти данные, поскольку он читает их из БД, но похоже, что происходит некоторая буферизация, и я получаю исключение памяти.
У меня нет какой-либо конкретной конфигурации для управления памятью, и я не смог найти ничего полезного об оптимизации памяти в службах данных ado.net. Мы будем благодарны за любую помощь в оптимизации памяти. Также я открыт для предложения пойти другим путем, поэтому не стесняйтесь вносить предложения.