Dreamer (dreamer_d) wrote,
Dreamer
dreamer_d

Читайте доки, они рулят

Сегодня ловил утечки памяти в .NET приложении, которое будет работать 24\7 и при этом использует GDI+ для нехилой отрисовки графа.

В итоге, кроме очевидных косяков, нашел такое - при вызове проперти Graphics::Transform, оно возвращает КОПИЮ матрицы трансформации. Копию, блждад! Об этом, кстати, черным по белому сказано в документации.
Вот так выглядит правильный метод использования -

using ( var matrix = graphics.Transform )
{
  // do operations here
}

вместо такого простого
var matrix = graphics.Transform;

если этим пренебречь, то имеем собранный GC обьект, без вызова Dispose(), а это 16 байт минимум на каждый вызов.
в итоге - дикий мемори лик при частых отрисовках.
Tags: .net gdi+
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments