У меня есть список, к которому добавляются элементы типа "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);
}
}