我有一个winform应用程序。主要形式是单例,它加载了很多图像。图片代表产品,每次点击图片,我都会修改产品的库存并重新加载产品和图片的哈希表。
问题在于每次我从 BBDD 重新加载产品的哈希表并重新加载图像时。在一天结束时,应用程序消耗了大量内存,我不知道何时以及如何卸载图像以便重新加载(因为有时我可以修改图像并且我也必须重新加载)
重新加载哈希表和按钮的代码是:
Family fam = new Family();
List<Family> listFamilies = fam.loadFamilies();
htProducts.Clear();
foreach(Family family in listFamilies)
{
//reload all the products of each family
if(htProducts[family.idFamily]==null)
{
List<Product> listProducts= fam.loadProductsFamily(family.idFamily);
htProducts[family.idFamily] = listProducts;
}
Button bt = new Button();
bt.location = new Point(x,y); //The buttons are created dinamically
bt.Parent = panelFamilies;//I have all the buttons inside a panel.
try
{
if(family.urlImage !="")
{
bt.Text=family.Name;
bt.Image = new Bitmap(family.urlImage);
}
}
catch(Exception ex)
{
....
}
}
当我点击一个系列按钮时,它会加载该系列的产品,但代码或多或少是相同的。它也加载图像。
或多或少这是代码。问题是每次单击按钮时,我都会在产品中加载更多按钮并加载图像。
很多时候,我重新加载单例表单并执行之前的代码,然后再次加载图像并耗尽内存。
¿ 何时以及如何卸载图像?
编辑:
在再次加载带有图像的按钮之前,我添加了以下代码:
foreach (Control c in panel8.Controls)
{
if (c is Button)
c.Dispose();
}
GC.Collect(GC.MaxGeneration);// I think that isn't correct to use because I've read, but reduces the memory.
它会在再次加载图像之前处理面板的所有按钮和图像并减少内存吗?
顺便说一句对不起我的英语:(
非常感谢。