Progress.Report вызывает утечку памяти в приложении С# wpf
У меня есть фоновый поток, который обрабатывает много данных.
Фоновый поток использует IProgress для отправки отчета в пользовательский интерфейс (может быть, это не лучшая практика?):
public OrderBook UpdatedOrderBook;
internal async Task CompareQuotes(CancellationToken stop, IProgress<OrderBook> progress = null, IProgress<Exception> errorInterface = null)
{
while (true)
{
UpdatedOrderbook = GetUpdatedOrderbook();
/* Process Data */
progress.Report(UpdatedOrderBook); // uncommenting this line solves memory leak
}
}
Пользовательский интерфейс запускает фоновую задачу следующим образом:
public UserInterface()
{
InitializeComponent();
CancelTask = new CancellationTokenSource();
var progressIndicator2 = new Progress<OrderBook>(ReportTriangularArbitrageProgress);
var reportError = new Progress<Exception>(ReportError);
Task botTask = Task.Run(() =>
{
Thread.CurrentThread.Name = "TriangularArbitrageCompareQuotes";
Bot.CompareQuotes(stop: CancelTask.Token,progress: progressIndicator2, errorInterface: reportError);
});
}
Метод обновления пользовательского интерфейса вызывается в progress.Report. Я установил return в первой строке, чтобы посмотреть, остановит ли это утечку, но, похоже, это не так.
void ReportTriangularArbitrageProgress(OrderBook updatedOrderBook)
{
return;
}
Как только я раскомментирую
Что вызывает утечку памяти и давление GC? Как предотвратить это? Есть ли лучший/правильный способ обновить пользовательский интерфейс?