【发布时间】:2011-08-10 11:45:50
【问题描述】:
我们正在开发餐厅自动化软件(使用 VS.NET C#)。我们正在使用 POS 产品,其中大多数产品都有 celeron 或 atom 处理器,上面有 512 mb 或 1gb ram。所以一开始就知道我们无法获得更强大的 PC(我看到了“为您的客户提供更好的 PC”这样的建议:))。
我们有一个内存问题。为了表示真实客户的购物车,我们使用面板,我们添加自定义控件来表示购物车中的产品。这意味着许多控件被添加到面板,然后删除(Panel.controls.Clear 函数。)这种方法会导致内存泄漏并且程序性能降低。在搜索和谷歌搜索后,我发现 Panel.Control.Clear() 函数清除了面板中的所有控件,但没有从内存中清除。所以我禁用了面板进行检查,并且一切正常。没有内存泄漏了。所以我决定移除那个购物车面板以节省记忆。但后来我在这里发现了非常有用的建议,比如 EmptyWorkingSet。
[DllImport("psapi.dll")]
static extern int EmptyWorkingSet(IntPtr hwProc);
static void MinimizeFootprint()
{
EmptyWorkingSet(Process.GetCurrentProcess().Handle);
}
然后我添加了代码,启用了购物车面板,但没有任何改变。性能还是不错的。没有内存泄漏,没有性能下降。但是有些人在here 和here 中说 EmptyWorkingSet 可能会导致页面错误并且很危险。我正在测试程序,什么也没发生。它就像一个魅力。所以这些是我的选择
- 移除导致内存问题的购物车面板。
- 从 cartPanel 中清除自定义控件后,从内存中删除自定义控件(我不知道怎么弄,但我能弄明白)
- 使用 EmptyWorkingSet 但它可能会导致页面错误(我真的不知道页面错误是什么意思)
那你说什么
【问题讨论】:
标签: c# visual-studio performance