【发布时间】:2020-04-08 13:07:59
【问题描述】:
我有一个添加“IJornalEnrty”类型元素的列表。并且有一个任务是慢慢读取列表。由于列表是共享资源,因此通过锁访问它。列表项必须写入数据库表,并且为了不长时间阻塞,复制内存并将该项从列表中删除。 由于读取列表的任务,内存不断增长,即使列表完全为空,内存也不会被清除。
public interface IJornalEnrty
{
string device { get; set; }
string action { get; set; }
string date { get; set; }
IJornalEnrty Clone();
}
public struct JornalEnrty : IJornalEnrty
{
public string device { get; set; }
public string action { get; set; }
public string date { get; set; }
public JornalEnrty(params string[] p)
{
device = p[0];
action = p[1];
date = p[2];
}
public IJornalEnrty Clone ()
{
return new JornalEnrty(String.Copy(device), String.Copy(action), String.Copy(date));
}
}
static async void InsertEntryAsync(object o)
{
CancellationToken cancel = (CancellationToken)o;
string sql = "";
while (!cancel.IsCancellationRequested)
{
IJornalEnrty entry = null;
await GetEntryListLoker.WaitAsync();
entry = EntryList[0]?.Clone();
EntryList.RemoveAt(0);
GetEntryListLoker.Release();
await SaveEntry(entry);
}
}
【问题讨论】:
-
垃圾收集器是不确定的。它不像 C++ 析构函数。内存不会在不再使用的那一刻被简单地释放。您可以使用
GC.Collect强制收集,但我建议不要这样做。
标签: c# list memory garbage-collection