У меня есть API, который должен возвращать большие списки данных JSON.Я пытаюсь передать его прямо из базы данных клиенту, чтобы избежать перегрузки ОЗУ на моем веб-сервере.Это был бы хороший способ сделать это?(Кажется, работает)
[HttpGet]
[Route("data")]
public IEnumerable<MappedDataDto> GetTestData()
{
var connection = new NpgsqlConnection(_connectionString);
connection.Open();
IEnumerable<RawDataDto> rawItems = connection.Query<RawDataDto>("SELECT * FROM sometable", buffered: true);
foreach (var rawItem in rawItems)
{
var mappedItem = Map(rawItem);
yield return mappedItem;
}
}
- Нужно ли разорвать соединение или об этом автоматически позаботятся?Я могу обернуть его в блок i
using
, так как при этом возникает исключение типа «невозможно получить доступ к удаленному объекту» - Было бы лучше использовать какой-либо поток вместо
yield return
?
РЕДАКТИРОВАТЬ: В моем случае у нас есть большое унаследованное веб-приложение на javascript, которое показывает графики и диаграммы данных между двумя датами.Клиент загружает весь набор данных и выполняет в памяти вычисления на клиенте для представления этих данных различными способами (пользователи могут создавать свои собственные пользовательские панели мониторинга, поэтому не все используют данные одинаково).
Наша проблема заключается в том, что, когда клиенты запрашивают период с большим количеством данных, потребление памяти нашим ASP.NET Core API значительно увеличивается.Так что это то, что мы пытаемся предотвратить.
К сожалению, внесение каких-либо более крупных изменений в клиент было бы очень трудоемким, поэтому мы смотрим на то, что мы можем вместо этого делать на стороне API.
Вот почему я пытаюсь выяснить, есть ли способ для потоковой передачи данных из базы данных через API.Так что на клиенте не должно быть никаких изменений, и использование API памяти не будет таким плохим, поскольку ему не придется хранить все в памяти.