我们正在为餐馆开发自动化软件(使用VS.NET C#)。我们正在使用POS产品,其中大多数都有celeron或atom处理器,上面有512 mb或1gb内存。所以在一开始就知道我们不能得到更强大的个人电脑(我看到了这样的建议:“给你的客户一个更好的PC”)。
我们的记忆有问题。为了表示实际客户的购物车,我们使用面板,添加自定义控件来表示购物车中的产品。这意味着许多控件正在添加到面板中,然后删除(Panel.controls.Clear函数)。这种方法会导致内存泄漏,程序性能会变慢。在搜索和googling之后,我发现Panel.Control.Clear()函数清除了面板中的所有控件,但没有从内存中清除。所以我禁用了面板来检查,所有的东西都正常工作。没有记忆泄漏了。所以我决定移除那块推车板来保存记忆。但后来我在这里发现了非常有用的建议,比如EmptyWorkingSet。
[DllImport("psapi.dll")]
static extern int EmptyWorkingSet(IntPtr hwProc);
static void MinimizeFootprint()
{
EmptyWorkingSet(Process.GetCurrentProcess().Handle);
}
然后我添加了代码,启用了购物车面板,没有什么改变。性能仍然是good.No内存泄漏,没有性能下降。但是有人说,在here和here中,EmptyWorkingSet可能会导致页面错误,这是危险的。我是测试项目但什么都没发生。就像一种魅力。所以这些是我的选择
删除导致内存problems.
那你觉得呢
发布于 2011-04-21 17:22:00
我认为问题在于,您正在清除控件的集合,而此时您应该对它们进行处理。此外,在清除控件之前,一定要取消将任何事件处理程序与控件挂钩,因为事件处理程序在对象之间设置引用,因此事件的侦听器将导致在其他情况下有资格使集合对象停留。我要走那条路,然后才能强制清理工作装置。
https://stackoverflow.com/questions/5747518
复制相似问题