in

Dé specialist in .NET trainingen en consultancy

Thomas Huijer

CLR Profiler

Hij is al een lange tijd uit, maar van de week had ik 'm voor het eerst echt nodig: de CLR Profiler. De tool kan bijzonder handig zijn bij het opsporen van memory-leaks en voor performance analyse. De tool is gratis te downloaden bij Microsoft. In een groot project (2 solutions van meer dan 30 projects) dat gebruik maakt van WPF en WCF, hadden we last van oplopend geheugen gebruik. Erg lastig om te achterhalen waar dat in zit. Zonder profiler helemaal, zelfs met de profiler was het nog een hele klus. Maar goed. Het heeft een hele berg aan tijd gescheeld. De profiler wees ons in de goede richting en daarna was het probleem redelijk snel gevonden. Tenminste, dat was de theorie. En ach ja, ik zal hem nog maar eens roepen: het verschill tussen theorie en praktijk is in praktijk een stuk groter dan in theorie.

Feit is dat we nog steeds een aantal dagen hebben moeten zoeken om het probleem te vinden. Dat vinden kost meestal 90% van de tijd. Als eenmaal het probleem duidelijk is, dan is meestal de oplossing vrij eenvoudig. Tenzij het heel je architectuur op z'n kop gooit. Maar dat was gelukkig niet het geval. Maar van dit soort bugs weet je dat je een oplossing gaat vinden. Je kan heel convergerend zoeken. Uiteindelijk kom je bij de oplossing. Maar pas ook op: de CLR-profiler grijpt in op je applicatie, zodat je misschien een Heisenbug achter na zit. Maar in mijn geval ging het om geheugengebruik, dus daar hadden we geen last van. Bottom-line: de CLR Profiler is een erg handige tool bij dit soort complexe bugs.

Voor de nieuwsgierigen onder jullie: we hadden een circular reference via een viertal objecten. Normalieter is dat geen probleem. De Garbage collector werkt op zo'n manier dat er geen reference-counting wordt gedaan. Als er naar alle vier de objecten geen reference is, dan worden ze alle vier opgeruimd. Maar één van onze objecten was ook een callback object van een WCF proxy. En die wordt in leven gehouden zolang het WCF channel open is. En het WCF channel hing nou juist weer aan één van die andere objecten. Dus het hield elkaar lekker in leven. Dus we hebben het channel op het juiste moment gesloten en dat was alles wat we hoefden te doen. Drie dagen zoeken, 1 regel code geschreven...

Oh ja, ook hebben we WinDbg nog nodig gehad en de Ants profiler geprobeerd.

Je hoopt dat je dit soort tools nooit nodig hebt, maar het is wel erg lekker dat ze er zijn voor dit soort extreme gevallen.

Published jun 28 2008, 10:34 by Thomas
Filed under: ,

Comments

No Comments

About Thomas

Thomas is a senior consultant and trainer. He's interested in anything related to improving software quality like clean code, testability, process optimalization, architectures and developer tools. Thomas can be reached at thomas@oosterkamp.nl.