c# - 显式释放内存

标签 c# asp.net memory-management

我知道这看起来像是重复的,但我认为这个具体案例可能有点不同。

在我的 MVC 应用程序中,我有一个 ViewModel,其中包含一个大列表,用于显示类似于 Excel 工作表的表格。每个 MyComplexClass 都包含一个 MyComplexClass 列表和一个 MyComplexColumn 列表。

这会占用大量内存,但现在我遇到了问题。我应该编写一个方法来清理我的大表,并将一组不同的数据加载到其中。我可以这样写:

    MyViewModel.Lines = new List<MyComplexClass>();
    MyViewModel.LoadNewSetOfData(SetOfData);

但是,来自 C 背景,明确地失去我对旧列表的引用不是我能做的,并且每天早上继续看着镜子里的脸。

我看到了Here , Here , 和 Here ,我可以将引用设置为 null,然后调用

GC.Collect()

但我被告知我并不是真正的最佳实践,尤其是因为它可能真的会影响性能,而且因为我无法知道 GC 是否已经处理掉了这个特定的内存分配。

有什么方法可以让我调用 Free() 之类的东西并继续生活吗?

谢谢

最佳答案

别担心!试图“鼓励”垃圾收集器回收内存并不是一个好主意——让它在后台完成它的工作。

只需加载您的不同数据集。如果内存越来越低,GC 将启动以回收内存,而无需您执行任何操作,如果有足够的内存可用,那么您将能够加载新的内存集而不会受到垃圾收集的影响。

关于c# - 显式释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812960/

相关文章:

c# - 使用 iPhone Apple 推送通知提供程序 (apns-sharp) 时出现 SslStream.AuthenticateAsClient 异常

javascript - 使用 Fetch 发送 url 中的变量和 Body 中的对象

c# - 从 C# 中的列表中完全删除所有至少有一个重复项的元素

asp.net - .NET : How to Create thumbnail from flash

jquery - 使用 Ajax Jquery 和 asmx 服务按 Id 获取数据

c# - 为什么 C# EF Core 会删除使用 block 之间的值?

c# - 'System.Data.Entity.Migrations.DbMigrationsConfiguration` 1' 的类型初始值设定项抛出异常

linux - Linux 中共享库的内存映射

c++ - 这是将 CString 与堆还是堆栈一起使用?我如何将它与堆内存一起使用?

我们可以在没有动态内存分配的情况下在 C 中使用双向链表吗?