首页 > 解决方案 > 单例可能的内存泄漏 blazor 组件

问题描述

我有以下单身人士:

  public class StockService
{
    public StockService()
    {
        
    }

    private List<string> Stock { get; set; }

    public void ReloadStock()
    {      
            Stock = System.IO.File.ReadAllLines(@"ExternalStock.csv").ToList();
    }
}

非常简单的服务,从 csv 文件加载产品库存并将结果保存在列表中。

当我重新加载此库存时会出现问题,每次重新加载时都会增加内存量?我希望它能够替换列表,并且“旧”列表会被遗忘,但这似乎并非如此,内存只会呈指数级增长。

我用作测试调用 ReloadStock 函数的 blazor 控制器:

    public partial class TestComponent
{

    [Inject] public Services.StockService StockService { get; set; }

    public List<string> ProductsToWatch { get; set; } = new List<string>();
    public string ProductCodeTextBox { get; set; }

    protected override async Task OnInitializedAsync()
    {
      
    }
    
    public void AddToList()
    {
        if (string.IsNullOrWhiteSpace(ProductCodeTextBox)) return;
        ProductsToWatch.Add(ProductCodeTextBox);
       
    }

    public void ReloadStock()
    {
        StockService.ReloadStock();
    }

}

标签: c#singletonblazor

解决方案


从理论上讲,一旦将 List 重新分配给新的引用,垃圾回收就会释放它的内存。在实践中,垃圾收集可能需要一些时间。作为测试,请尝试调用GC.Collect()您的 ReloadStock 方法。


推荐阅读