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? Как предотвратить это? Есть ли лучший/правильный способ обновить пользовательский интерфейс?

0 ответов

Другие вопросы по тегам