1

私の WPF コントロールの 1 つは、プライベート メンバーの 1 つが原因でメモリに保持されます。有罪のメンバーは DispatcherTimer であり、保持は Tick イベント ハンドラーによるものです。(このリークは、ANTS Memory Profiler ツールの助けを借りて検出されました)

明らかに、ロード/アンロード時にハンドラーを設定/削除します。そして、コントロールはアンロードされます...

void TransportControl_Loaded(object sender, RoutedEventArgs e)
{
  if (m_playheadTimer == null)
  {
    m_playheadTimer = new System.Windows.Threading.DispatcherTimer();
    m_playheadTimer.Tick += PlayheadTimer_Tick;
    m_playheadTimer.Interval = TimeSpan.FromMilliseconds(50);
  }
}

void TransportControl_Unloaded(object sender, RoutedEventArgs e)
{
  if (m_playheadTimer != null)
  {
    if (m_playheadTimer.IsEnabled)
      m_playheadTimer.Stop();

    m_playheadTimer.Tick -= PlayheadTimer_Tick;
  }
}

しかし、それでも私はその問題に悩まされています(私のコントロールがメモリに詰まっているのと同じです)。任意のアイデア、THX

4

1 に答える 1

0

弱いイベント パターンを確認する必要があります。ただし、これはまったく簡単なトピックではありません。

于 2010-09-23T08:15:58.177 に答える