.Net c#应用程序在进程完成后使用过多内存

本文关键字:内存 应用程序 进程 Net | 更新日期: 2023-09-27 18:19:42

我制作了一个简单的.net应用程序,它从数据库中获取数据并保存为excel文档。我注意到的问题是,一旦流程完成并生成电子表格,应用程序就会占用大约750mb的内存。它正在整理一份大报告,但我想一旦它保存下来,内存就会被释放吗?

是这样吗?

感谢

.Net c#应用程序在进程完成后使用过多内存

Garabage收集器不会立即释放内存。

此外,还要确保正确处理所有对象,并允许垃圾收集器拾取这些项目。在保存后的想法中,项目是否仍被应用程序中的某个内容引用并不重要。

尝试使用内存探查器。以下是一些产品链接:

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

http://www.jetbrains.com/profiler/

In.Net内存不一定会自动释放。

您可以尝试Dispose()所有实现IDisposable的大型对象和/或清空对这些实例的任何引用,然后调用GC.Collect()强制立即进行垃圾收集。如果在处理完大型对象后仍保留对它们的引用,则此可能会有所帮助。

如果数据仍然被应用程序引用和使用,那么内存将不会被垃圾收集。参见垃圾收集

还可以看到前面的问题可能有帮助吗?我发现它非常有用,尤其是伊戈尔·泽瓦卡的回答。

检查定义。例如,如果您在代码中定义了表单,它将使用大量ram,因为多次启动相同的表单。

例如;我的申请表上有三张表格。表格1、表格2和表格3。

namespace RAMAPP 
{
    public partial class RAMAPP : Form
    {
       Form1 first = new Form1();
       Form2 second = new Form2();
       Form3 third = new Form3();
    public RAMAPP()
    {
       InitializeComponent();
    }
}
}

在这里,当你们点击开始按钮时,程序会读取你们现在写的所有行。在开始之前,RAMAPP程序将Forms定义为第一个、第二个和第三个。问题是在初始化之前定义这些表单。您应该在初始化之前删除所有表单定义。之后,重新启动您的程序,它将有望运行:)