这是内存泄漏吗?
private void Process()
{
for (; ; )
{
// local variable
RemoteClient remoteClient = new RemoteClient(..);
// subscription without unsubscription
remoteClient.BadClient += new EventHandler(remoteClient_BadClient);
}
..
}
public class RemoteClient
{
...
public event EventHandler BadClient;
}
答案 0 :(得分:2)
这取决于RemoteClient类中的其他内容。如果dispose
没有对象,则表示没有内存泄漏。如果有任何具有IDisposable
内容的对象,则需要继承ÌDisposable`并销毁这些对象。
另外,我认为删除处理程序和退出循环对你来说并不陌生。
因为客户端听起来像一个Web服务,所以看一下调用异步线程可能很重要。 .NET: Do I need to keep a reference to WebClient while downloading asynchronously?
如果整个东西变得更复杂,检查对象状态也很重要。
答案 1 :(得分:1)
如果您要退出for
循环,这不是内存泄漏。每个remoteClient
将保留对remoteClient_BadClient
委托的引用,但remoteClient
本身将适用于每次迭代后的垃圾收集(如果您不在其他地方存储对remoteClient
的引用!) 。收集remoteClient
也将处理remoteClient_BadClient
代表的引用,这也将允许收集它。
答案 2 :(得分:0)
不,除非你处于无限循环中。