У меня проблема с утечкой памяти в приложении .NET CF.
Использование об / мин Я определил, что динамически создаваемые элементы управления не собираются мусором, как ожидалось. Выполнение одного и того же фрагмента кода в .NET Window Forms ведет себя по-разному и располагает элементом управления, как я ожидал.
См. Выходные данные об / мин через PerfMon для счетчика Process Heap :
GC Heap:
Мое лучшее предположение состоит в том, что Слабая ссылка на Панель по неизвестной причине не делает объект пригодным для GC, не так ли?
Обратите внимание: Несмотря на то, что Dispose () решает проблему для образца, я не могу легко включить его в существующее приложение, так как это не так ясно, чтобы определить когда объект больше не используется.
Я включил упрощенную версию исходного кода для иллюстрации проблемы:
using System;
using System.Windows.Forms;
namespace CFMemTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Calling this event handler multiple times causes the memory leak
private void Button1_Click(object sender, EventArgs e)
{
Panel uc = new Panel();
// Calling uc.Dispose() cleans up the object
}
}
}
Обновление:
1. Вызов GC.Collect () также не приводит к очистке панелей.
2. Использование .NET CF 2.0 SP1 на устройстве Windows CE 4.2.