Проблема утечки памяти при возврате объектов DataTable из C# Web API - PullRequest
0 голосов
/ 27 января 2020

У меня есть приложение. NET Core 2.2 web API. Он возвращает довольно большие порции данных JSON для веб-приложения, которое в основном отключено от сервера.

Во всем приложении я возвращаю объекты System.Data.DataTable из контроллеров. Запрос может быть обработан так:

[HttpGet]
public ActionResult<Dictionary<string, object>> Orders(string stuff, DateTime? start, DateTime? end)
{
  var ret = new Dictionary<string, object>();
  var pending_data = new DataTable();

  using (SqlCommand cmd = new SqlCommand("select stuff from stuff", connection)) {
    using (SqlDataReader rdr = cmd.ExecuteReader()) {
      pending_data.Load(rdr);
    }
  }
  ret.Add("pending_orders", pending_data);
  return Ok(ret);
}

Будет ли возвращение таблиц DataTable, подобных этой, создавать утечку ресурсов? Я сейчас тестирую, и использование памяти кажется выше, чем я ожидал. Возможно, мне придется написать некоторый тестовый код, который вручную вызывает G C, чтобы увидеть базовый уровень после каждого запроса.

1 Ответ

0 голосов
/ 28 января 2020

После долгих испытаний не видно заметной утечки. Из-за ошибки было выделено чрезмерное количество памяти, но после тестирования нескольких параллельных подключений к серверу не было утечки памяти. Фактически, многие параллельные соединения приводили к тому, что G C запускался чаще, а общее использование памяти уменьшалось.

...