【发布时间】:2020-05-12 11:41:31
【问题描述】:
我有一个对象列表。列表中的对象数约为 5,06,011。
它在内存中消耗 190MB。
过了一段时间我就不需要那个列表了。我清除了列表
list.clear() 命令清除该列表中的所有对象。
但是,我的应用程序仍然消耗 190 MB 内存。
如何正确处理列表?
public class FileProperty
{
public string Name { get; set; }
public string DirectoryPath { get; set; }
public long LastWriteTime { get; set; }
public long Size { get; set; }
}
void Main()
{
var Sqlite = new SqliteConnection(@"Filename=D:\Work\UserData.db");
var FileProps=Sqlite.Query<FileProperty>("SELECT *FROM FileProperties;").ToList();
//Task completed with that collection
//Now want to free memory
FileProps.Clear();
//But memory not freed
}
【问题讨论】:
-
您是如何检查的(哪个工具;哪个指标)?您等待 GC 发生多长时间?列表本身只使用很少的 RAM。这些对象是否被其他东西引用?最好使用 .NET 内存分析器,例如 dotMemory(Resharper 的一部分)。
-
度量部分非常重要,因为.NET 不会将内存还给操作系统。所以这取决于角度:从操作系统的角度来看,内存已经消失(它已经给了.NET)。从 .NET 的角度来看,内存是空的(里面没有对象)。
-
我等了 5 分钟。有没有办法强制垃圾收集器释放资源。
-
添加了小代码@ThomasWeller
-
您是在运行调试版本还是发布版本?
标签: c# .net .net-core garbage-collection