0

我目前有一个类,我在其中存储一个静态集合,该集合在调用某些方法时获取添加和删除的对象。这是当前代码:

public class MatchMaker : Hub
    {

    private static HashSet<SoloUser> soloUsers = new HashSet<SoloUser>();

     //Client Requests
    public void findNewPartner(string Name, string Country)
    {

        SoloUser soloUser = soloUsers.Users.FirstOrDefault(s => (s.Name == Name) && (s.Country == Major));
        if (soloUsers.Users.Count > 0){
            Clients.partnerRequestResult(soloUsers.Users.FirstOrDefault());
            soloUsers.Users.Remove(soloUser);
            Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
            long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
            Debug.WriteLine("TotalMemoryUsed: " + totalBytesOfMemoryUsed);
        }
        else
        {
            soloUser = new SoloUser { 
                Name = Name,
                Country = Country                       
            };
            soloUsers.Users.Add(soloUser);
            Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
            long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
            Debug.WriteLine("TotalMemoryUsed: " + totalBytesOfMemoryUsed);
        }



    }
}

当我运行时:

Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
Debug.WriteLine("TotalMemoryUsed: " + totalBytesOfMemoryUsed);

从集合中添加或删除一个对象,无论我是否从集合中添加或删除该对象,输出totalBytesOfMemoryUsed变得越来越大(每次 2mb),这是由于内存泄漏吗?这甚至是检查内存管理的充分方法吗?当我从集合中移除一个对象时,我需要处理它吗?

4

2 回答 2

1

这里可能没有足够的信息来评论内存泄漏,但在一般情况下 - 相信垃圾收集器
如果您仍然怀疑内存泄漏,请使用内存分析器(例如ANTSdotTrace)。

于 2012-07-27T23:18:06.793 回答
0

IDisposable一个很好的做法是在您完成后立即处理任何实现的对象。

鉴于此,您需要记住 .NET 垃圾收集器是不确定的。这意味着您不必事先知道何时进行收集。当运行时需要执行收集时,它会尝试执行该操作。无论如何,你不应该害怕 2mb。让垃圾收集器完成它的工作。

试图通过获取内存工作集或查看 Windows 任务管理器来分析程序的内存使用情况通常是在兔子洞中旅行。在您实际遇到问题后使用内存分析器(例如ANTS)。

我还建议阅读有关垃圾收集器的 MSDN。你可以从这里开始。

于 2012-07-27T23:15:11.293 回答