我已经制作了一个简单的.net应用程序,它从数据库获取数据并保存为excel文档。我注意到的问题是,一旦过程完成并生成电子表格,应用程序就会消耗约750MB的内存。它正在整理一个大的报告,但是我认为一旦它保存了内存就被释放了?.Net c#应用程序在完成过程后使用太多内存
这是这种情况?
谢谢
我已经制作了一个简单的.net应用程序,它从数据库获取数据并保存为excel文档。我注意到的问题是,一旦过程完成并生成电子表格,应用程序就会消耗约750MB的内存。它正在整理一个大的报告,但是我认为一旦它保存了内存就被释放了?.Net c#应用程序在完成过程后使用太多内存
这是这种情况?
谢谢
在.Net内存不一定会自动释放。
您可以尝试使用Dispose()
实现IDisposable的所有大对象和/或清空对这些实例的任何引用,然后调用GC.Collect()
来强制立即进行垃圾回收。 可能会在您完成对大对象的引用时提供帮助。
如果数据仍然被引用和应用程序使用,那么内存不会被垃圾收集。见garbage collection
另请参阅this previous question可能有帮助吗?我发现它非常有用,特别是Igor Zevaka的回答。
检查定义。例如,如果你在你的代码中定义了表单,它会使用很多内存,因为很多时候都是以相同的形式开始的。
例如;我的应用程序中有3种形式。 Form1,Form2和Form3。
namespace RAMAPP
{
public partial class RAMAPP : Form
{
Form1 first = new Form1();
Form2 second = new Form2();
Form3 third = new Form3();
public RAMAPP()
{
InitializeComponent();
}
}
}
在这里,当您点击开始按钮时,程序将读取您现在写入的所有行。在开始之前,将RAMAPP程序定义为第一,第二和第三。问题是在初始化之前定义这些表单。 您应该在初始化之前删除所有表单定义。 在此之后,重新启动您的程序,它将有望运行:)
你从哪里得到'750 MB的内存'?您可能正在查看“Working Set”,因为即使它们未被使用,页面仍保留在进程的工作集中,这将是一个不好的指标。确保你正在查看私人字节 – 2012-01-06 15:25:30