我创建了一个简单的.net应用程序,它从数据库中获取数据并保存为excel文档。我注意到的问题是,一旦完成流程并生成电子表格,应用程序就会占用大约750mb的内存。它正在整理一份大报告,但是我想过,一旦它保存了内存被解除分配?
是这样的吗?
由于
答案 0 :(得分:2)
在.Net内存中不一定会自动释放。
您可以尝试Dispose()
实现IDisposable的所有大对象和/或对这些实例的任何引用为空,然后调用GC.Collect()
强制立即进行垃圾回收。如果您在完成大对象后持有对大对象的引用,则可能有帮助。
答案 1 :(得分:2)
Garabage Collector不会立即取消分配内存。
您还要确保正确处理所有物体,并允许垃圾收集器拾取物品。在您保存之后的想法中,如果项目仍被您的应用程序中的某些内容引用,则无关紧要。
答案 2 :(得分:2)
尝试使用内存分析器。以下是一些产品链接:
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/
答案 3 :(得分:1)
如果应用程序仍然引用和使用数据,则不会对内存进行垃圾回收。见garbage collection
另见this previous question可能有帮助吗?我发现它非常有用,特别是Igor Zevaka的答案。
答案 4 :(得分:0)
检查定义。例如,如果您在代码中定义了表单,则会因为多次使用相同的表单而使用大量的ram。
例如;我的申请表中有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程序将Forms定义为第一,第二和第三。问题是在初始化之前定义这些表单。 您应该在初始化之前删除所有表单定义。 在此之后,重新启动您的程序,它将有希望运行:)