В следующих двух случаях, если Клиент является одноразовым (реализует IDisposable), я полагаю, что он не будет утилизирован ASP.NET, что может стать причиной утечки памяти:
[WebMethod]
public Customer FetchCustomer(int id)
{
return new Customer(id);
}
[WebMethod]
public void SaveCustomer(Customer value)
{
// save it
}
Это (якобы) недостаток распространяется на любой идентифицируемый объект.Поэтому возврат DataSet из веб-службы ASP.NET, например, также приведет к утечке памяти - DataSet не будет удален [EDIT: В этом сообщении утверждается, что Dispose для DataSet ничего не делает, поэтомувозможно, это не такая проблема]
В моем случае Клиент открыл соединение с базой данных, которое было очищено в Dispose, за исключением того, что никогда не вызывался Dispose, что приводило к загрузке незакрытых соединений с базой данных.Я понимаю, что здесь следует целый ряд плохих практик, но дело в том, что ASP.NET - (де) сериализатор - отвечает за удаление этих объектов, так почему бы и нет?
Этопроблема, о которой я знал некоторое время, но никогда не доходил до сути.Я надеюсь, что кто-то может подтвердить то, что я нашел, и, возможно, объяснить, если есть способ справиться с этим.