我想知道在soap请求(没有实现IDisposable)期间实例化的对象有多长时间留在内存中?
例如:
...
public GetRecordsResponse GetRecords(GetRecordsRequest request)
{
GetRecordsTransaction transaction = new GetRecordsTransaction();
GetRecordsResponse response = transaction.GetResponse(request);
return response;
}
...
交易在内存中保留多长时间?
肥皂一发送回复?会话(如果在wcf中存在)?
答案 0 :(得分:3)
实现IDisposable与托管内存几乎没有关系。垃圾收集是关于清理托管内存;但IDisposable旨在允许控制释放非托管资源。
从您的代码示例中,您无法保证对象在内存中的使用时间,并且您绝对不应该对垃圾收集器在这些对象恢复内存的时间(或后期)做出任何假设。不再被您的代码引用。
我可以问你为什么需要知道吗?听起来好像你期望你的事务在垃圾收集时有某种行为,当你真正想要的是显式回滚或提交它们时。如果你能解释你的根本问题,这可能有助于澄清问题。
答案 1 :(得分:2)
它们不是缓存的。它们可能不会被垃圾收集一段时间。