从 C# Web 返回 DataTable 对象是否存在内存泄漏问题 API

Is There Memory Leak Issue with Returning DataTable Objects From C# Web API

我有一个 .NET Core 2.2 网络 API 应用程序。它 return 相当大的 JSON 数据块,用于大部分与服务器断开连接的 Web 应用程序。

在整个应用程序中,我 return 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);
}

像这样 returning DataTables 会造成资源泄漏吗?我现在正在测试,内存使用率似乎比我预期的要高。我可能不得不编写一些测试代码,手动调用 GC 以查看每次请求后的基线是什么。

经过多次测试,似乎没有明显的泄漏。由于错误分配了过多的内存,但在测试到服务器的多个并行连接后,none 的内存似乎正在泄漏。事实上,许多并行连接似乎使 GC 运行 更频繁,内存使用量整体下降。