1 min to read
Memory leak z LDAP

Wycieki pamięci od zawsze i z założenia są wredne.
O ile w małych systemach znalezienie przyczyny wycieku jest proste, szybkie, łatwe i przyjemne, o tyle znalezienie smerfa w czymś większym stanowi już nie lada wyzwanie
To co mi się przytrafiło to nie wykorzystanie dispose’a w metodzie findAll - tyle.
Żadnych cudownych opowieści. Znalazłem go tylko dlatego, że mogłem testować moduły w swoim kodzie. Moduł który najmniej robił najwięcej zjadał… typowe.
Jeżeli chodzi o te wszystkie analizatory, to nic mi nie było w stanie pomóc, bo wyciek następował poza kodem zarządzanym.
Szybkie demo dla mnie i potomnych jak powinno wyglądać pobranie np. użytkowników z Active Directory:
using (var context = new PrincipalContext(ContextType.Domain, "dom.com"))
{
using (var userPrincipal = new UserPrincipal(context))
{
using (var searcher = new PrincipalSearcher(userPrincipal))
{
using (var users = searcher.FindAll())
{
foreach (var user in users)
{
using (var de = user.GetUnderlyingObject() as DirectoryEntry)
{
if (de != null)
{
Console.WriteLine( de.Properties["givenName"].Value);
}
Console.WriteLine();
}
}
}
}
}
}
Comments