c# - 单例可能的内存泄漏 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();
}
}
解决方案
从理论上讲,一旦将 List 重新分配给新的引用,垃圾回收就会释放它的内存。在实践中,垃圾收集可能需要一些时间。作为测试,请尝试调用GC.Collect()
您的 ReloadStock 方法。