消耗大量IIS应用程序池内存的Web api方法

时间:2015-04-09 16:12:06

标签: c# asp.net-mvc iis-7

对于模糊的主题标题感到抱歉,但我不知道发生了什么,所以我现在不能更清楚了。基本上,我注意到IIS应用程序池为我们运行的api占用了大量内存。

我有一个Web api方法,它返回一个客户列表。

public async Task<IHttpActionResult> GetCustomerList()
{
    List<CustomerDTO> dtoCustomers = await customerService.GetCustomers();

    return CreatedAtRoute("DefaultApi", new { }, dtoCustomers);
}

这是GetCustomers方法:

public async Task<List<CustomerDTO>> GetCustomers()
{
    List<CustomerDTO> lstCustomers = new List<CustomerDTO>();
    using (DBContext db = new DBContext())
    {
        var Customers = await db.Customers.Where(i => i.Deleted == false).OrderBy(i => i.CustomerName).ToListAsync();
        foreach (var Customer in Customers)
        {
            lstCustomers.Add(Mapper.Map<CustomerDTO>(Customer));
        }
    }
    return lstCustomers;
}

AutoMapper映射只调用Customer对象的实例,并从实体对象中设置值(只是名称和地址)。

每次调用都会返回大约100K的数据。在每次调用时,IIS工作进程将其内存使用量增加约50-100MB或更多。多次运行该方法会导致工作进程内存暴涨。我做了一个测试,我从GetCustomers()调用返回一个空列表,IIS内存使用率仍然保持上升但速度慢得多(每次调用约80K)。

所以IIS工作人员只是过快地吃内存,我很惊讶它不是垃圾收集。我可以在应用程序池中设置内存限制,但它会在一整天内一遍又一遍地重复使用。

有没有人看到任何特别愚蠢的东西,我正在做的导致这种内存消耗?任何想法都将不胜感激。

0 个答案:

没有答案