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+
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

  • 0 comments