如何避免过度使用内存

问题描述

客户抱怨以下组件的内存使用量不断增加。我该如何处理?

这就是 Resource 类的工作原理:

using System;
using System.Collections.Generic;

public class Resource : Idisposable
{
    private List<string> tasks = new List<string>();

    public int Id { get; private set; }

    public IEnumerable<string> Tasks { get { return this.tasks; } }

    public Resource(int id)
    {
        this.Id = id;
    }

    public void PerformTask(string task)
    {
        if (this.tasks == null)
            throw new ObjectdisposedException(this.GetType().Name);

        this.tasks.Add(task);
    }

    public void dispose()
    {
        this.tasks = null;
    }
}

这是跑步类的工作方式

public class Runner
{
    private readonly Dictionary<int,Resource> resources = new Dictionary<int,Resource>();

    public IEnumerable<Resource> Resources { get { return this.resources.Values; } }

    public Resource AcquireResource(int id)
    {
        Resource w = null;

        if (!this.resources.TryGetValue(id,out w))
        {
            w = new Resource(id);
            this.resources.Add(id,w);
        }

        return w;
    }

    public void ReleaseResource(int id)
    {
        Resource w = null;

        if (!this.resources.TryGetValue(id,out w))
            throw new ArgumentException();

        w.dispose();
    }

    public static void Main(string[] args)
    {
        var d = new Runner();

        d.AcquireResource(1).PerformTask("Task11");
        d.AcquireResource(2).PerformTask("Task21");
        Console.WriteLine(string.Join(",",d.AcquireResource(2).Tasks));
        d.ReleaseResource(2);
        d.AcquireResource(1).PerformTask("Task12");
        Console.WriteLine(string.Join(",d.AcquireResource(1).Tasks));
        d.ReleaseResource(1);
    }
}

即使使用的资源应该由组件释放。这是我从互联网上得到的 - 我该如何处理这种情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)