当我添加并删除内存中的某个静态集合时,我是否遇到内存泄漏?

时间:2012-07-27 23:06:45

标签: c# asp.net memory-management memory-leaks

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

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),无论我是否从集合中添加或删除对象,这是由于内存泄漏?这甚至是检查内存管理的充分方法吗?当我从集合中删除对象时,是否需要处置对象?

2 个答案:

答案 0 :(得分:1)

此处可能没有足够的信息来评论内存泄漏,但在一般情况下 - 请相信Garbage Collector
如果您仍怀疑内存泄漏,请使用内存分析器(例如ANTSdotTrace)。

答案 1 :(得分:0)

最好在完成后立即处理实现IDisposable的任何对象。

鉴于此,您需要记住.NET垃圾收集器是非确定性的。这意味着您不必事先知道集合何时会发生。当运行时需要执行集合时,它会尝试执行此操作。不管怎么说你不应该害怕2mb。让垃圾收集器做它的工作。

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

我还建议一般阅读有关垃圾收集器的MSDN。您可以启动here