我在 C# 中释放内存时遇到问题。我有一个包含静态字典的静态类,其中填充了对对象的引用。单个对象 zajumie 大量内存。有时我会通过删除对设置为 null 的对象的过时引用并从字典中删除该项目来释放内存。不幸的是,在这种情况下,内存并没有变慢,在达到系统中内存的最大大小后的时间就好像突然释放了未使用的资源,正确使用的内存量减少了。下面是类图:
public class cObj
{
public DateTime CreatedOn;
public object ObjectData;
}
public static class cData
{
public static ConcurrentDictionary<Guid, cObj> ObjectDict = new ConcurrentDictionary<Guid, cObj>();
public static FreeData()
{
foreach(var o in ObjectDict)
{
if (o.Value.CreatedOn <= DateTime.Now.AddSeconds(-30))
{
cObj Data;
if (ObjectDict.TryGetValue(o.Key, out Data))
{
Data.Status = null;
Data.ObjectData = null;
ObjectDict.TryRemove(o.Key, out Data);
}
}
}
}
}
在这种情况下,内存被释放。但是,如果在此操作之后,我调用
GC.Collect ();
了预期的未使用对象的释放。
如何解决问题,让您不必使用GC.Collect()
?