.net - Sådan fejler du en fejl ved oprettelse af vindueshåndtag?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at debugere en fejl, der kommer ud af en Windows .NET-baseret applikation. Fejlmeddelelsen går noget som 'Fejl ved oprettelse af vindueshåndtag'. Ved at undersøge om denne fejl fandt jeg ud af, at den sandsynlige årsag er, at applikationen bruger mere end 10000 brugerhåndtag. [1] [2]


Jeg vil indsætte nogle fejlkode i ansøgningen og se, hvor mange 'brugerhåndtag' er applikationen ved hjælp af. Men googling for 'hvordan man tæller brugerhåndtag' hjalp ikke.


Så har nogen af ​​jer haft et lignende problem? Hvis ja, hvordan fejlede du det?

Bedste reference


Der er 2 sandsynlige årsager til dette problem i en WinForm app



  1. Du fjerner ikke aktivt Kontrol og Form-forekomster i din ansøgning. Det er sværere at ramme problemet på denne måde, som med lidt tid, vil GC rense håndtagene, men det er stadig muligt.

  2. PInvoke til en indbygget API og ikke lukke de resulterende håndtag



Det ville være de første 2 steder jeg ville tjekke. En anden ide ville være at gå direkte til kilden og starte debugging af håndtaget. Her er nogle links om, hvordan man opnår dette.



  • http://blogs.msdn.com/junfeng/archive/2008/04/21/use-htrace-to-debug-handle-leak.aspx

  • http://www.codeproject.com/KB/debug/cdbntsd5.aspx


Andre referencer 1


En anden mulig årsag til dette er en vis kontrol, der kaster en undtagelse inde i OnHandleCreated eller den tilhørende HandleCreated-begivenhed. Jeg mener, at dette kan medføre fejl, der ligner det, du ser. [3] [4] [5] [6]