正在从IIS内存中清理大型对象

本文关键字:大型 对象 内存 IIS | 更新日期: 2023-09-27 18:20:15

我有一个应用程序,它将DataTables存储在内存缓存(AppFabric)中。这些数据表可能相当大。一旦我们的应用程序(MVC站点)流量很大,IIS的内存使用率就会很快飙升。

理想情况下,我们希望能够释放这些DataTables从Cache请求后所消耗的内存。

控制器的代码与类似

Using (DataTable dt = DataTable)
{
    DataTable dt = Cache.GetObject(objectID);
    //perform some manipulation on Data table
    DataTable dtSmaller = dt.Select("Select top 1...");
   dt.Dispose();
}   
    //return from controller
return dtSmaller;

一旦此控制器被多次命中,W3WP.exe进程就会使用大量内存,直到最终耗尽内存。实际情况是,DataTable来自缓存,它被查询以减小输出数据的大小。然后我处理原始DataTable。

我正在寻找一种释放DataTable消耗的内存的方法,而不依赖IIS垃圾回收

正在从IIS内存中清理大型对象

您可以通过调用GC.GetTotalMemory(true) 来强制执行一个完整的垃圾回收周期

有关该方法的更多信息:GC.GetTotalMemory