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()
?を使用する必要はありません。