我有近 1,000,000 条记录的数组,每条记录都有一个“文件名”字段。
有许多文件名完全相同的记录。
我的目标是通过去重字符串实例(文件名实例,而不是记录)来改善内存占用。
.NET Framework 2.0 是一个约束。这里没有 LINQ。
我为重复数据删除编写了一个通用(和线程安全)类:
public class Deduplication<T>
where T : class
{
private static Deduplication<T> _global = new Deduplication<T>();
public static Deduplication<T> Global
{
get { return _global; }
}
private Dictionary<T, T> _dic;// = new Dictionary<T, T>();
private object _dicLocker = new object();
public T GetInstance(T instance)
{
lock (_dicLocker)
{
if (_dic == null)
{
_dic = new Dictionary<T, T>();
}
T savedInstance;
if (_dic.TryGetValue(instance, out savedInstance))
{
return savedInstance;
}
else
{
_dic.Add(instance, instance);
return instance;
}
}
}
public void Clear()
{
lock (_dicLocker)
{
_dic = null;
}
}
}
这个类的问题是它增加了更多的内存使用,并且它一直呆在那里直到下一次 GC。
我正在寻找一种减少内存占用的方法,而无需增加大量内存使用,也无需等待下一次 GC。我也不想使用GC.Collect()
,因为它会冻结 GUI 几秒钟。