Возвращать CSV из Api, не помещая все результаты базы данных в строку - PullRequest
0 голосов
/ 03 февраля 2020

Итак, я хочу получить API, который получает пару столбцов из большой базы данных и возвращает их в виде CSV (текст). Проблема возникает, если я пытаюсь сначала получить их, а затем собрать CSV, потому что память быстро заполняется (400 МБ для 800k строк). Это самое близкое, что я получил, чтобы заставить его работать, но формат на самом деле не CSV, это строки, разделенные кавычками, и это не единственная строка.

 public IEnumerable<string> getCSV()
    {

        var names = typeof(AddressBook).GetProperties()
                    .Select(property => property.Name)
                    .ToArray();
        yield return string.Join(",", names);
        foreach( string name  in names)

        var query = context.AddressBook.Select(x => string.Join(",", x.Name, x.Surname, x.BirthDate)).AsNoTracking();


        foreach (string row in query)
        {
            yield return row;
        }

    }

1 Ответ

0 голосов
/ 03 февраля 2020
  1. Ваша программа не должна занимать слишком много памяти. Это может через MemoryOutOfBounds исключение.
  2. API предназначены для быстрого ответа. Ваш API не должен занимать много времени для выполнения / возврата данных.
  3. Если у вас слишком много данных, рекомендуется реализовать разбиение на страницы для вашего API.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...