微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何避免过度使用内存

如何解决如何避免过度使用内存

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

这就是 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 举报,一经查实,本站将立刻删除。