Winforms GDI утечка несмотря на использование статического шрифта или избавление от шрифта?

У меня есть статический объект Font в приложении Winforms. Он динамически создает и уничтожает элементы управления, такие как поля редактирования и т. Д. В некоторых случаях свойство Font назначается из статического (одноэлементного) объекта Font. Несмотря на то, что существует только один объект шрифта, каждый раз (!) Элемент управления уничтожается и воссоздается с использованием одного и того же (!) Объекта шрифта, количество объектов GDI увеличивается на единицу. GDIView показывает, что это объект шрифта. Если свойство Font не назначено новому элементу управления, увеличение GDI-объекта не происходит.

Я также пытался динамически воссоздавать объект Font каждый раз, когда создается элемент управления, и утилизировать его при удалении элемента управления, но это не имеет значения.

Это ошибка в Winforms (.NET 4.5.2, VS2015, также пробовал.NET 3.5) или я что-то пропустил? Здесь много вопросов относительно утечек ресурсов GDI, но никто не ответил на мой вопрос.

Вот небольшое Winforms TestApp с одной кнопкой на нем, чтобы продемонстрировать проблему:

    private const string Todelete = "todelete";

#if !DYNAMIC_FONT
    static readonly Font Font = new Font("Arial", 11, GraphicsUnit.Pixel);  
#endif
    private void Button_Click(object sender, EventArgs e)
    {
        Controls.Find(Todelete, false).FirstOrDefault()?.Dispose();

        var ctrl = new TextBox();
#if !DYNAMIC_FONT
        ctrl.Font = Font;//leaks GDI handle every time!
#else
        ctrl.Font = new Font("Arial", 11, GraphicsUnit.Pixel); 
        // does not help:
        ctrl.Disposed += (sender2, args) => ((Control)sender2).Font.Dispose();
#endif
        ctrl.Name = Todelete;
        Controls.Add(ctrl);
    }

Кстати. нет утечек объекта USER, поэтому элемент управления удаляется должным образом, но оба варианта пропускают объект GDI при каждом нажатии кнопки. Не назначение свойства Font разрешает его, но как я могу назначить шрифт без утечки?

0 ответов

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