У меня проблема с утечкой памяти в приложении .NET CF.Утечка памяти в .NETCF - создание динамических элементов управления?
Использование RPM Я определил, что динамическое создание элементов управления не является сборкой мусора, как ожидалось. Выполнение одного и того же фрагмента кода в формах .NET Window ведет себя по-разному и предоставляет управление, как я ожидал.
Смотрите вывод из RPM через PerfMon для процесса 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.
Привет Митч, я читаю блог Стивена и могу подтвердить, что эти объекты не освобождены даже после: Вызов GC.Collect() или выделение более 1 МБ объектов – 2008-10-14 11:51:14