.net - Hvilken kvote er der henvist til i denne undtagelsesbesked: Der er ikke nok kvote til at behandle denne kommando

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en .NET-applikation, der kaster følgende undtagelse:


System.ComponentModel.Win32Exception : Not enough quota is available to process this command 
   at MS.Win32.UnsafeNativeMethods.PostMessage(HandleRef hwnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
   at MS.Win32.ManagedWndProcTracker.HookUpDefWindowProc(IntPtr hwnd) 
   at MS.Win32.ManagedWndProcTracker.OnAppDomainProcessExit() 
   at MS.Win32.ManagedWndProcTracker.ManagedWndProcTrackerShutDownListener.OnShutDown(Object target) 
   at MS.Internal.ShutDownListener.HandleShutDown(Object sender, EventArgs e)


Jeg kan ikke reproducere denne undtagelse personligt, men jeg får mange undtagelsesrapporter fra brugere.


Hvad henvises til 'kvoten'? Stakkesporet får mig til at tro, at det kan være et problem med Windows-meddelelseskøen.


Eventuelle ideer om, hvad der kan forårsage denne fejl, eller hvordan man retter det, vil blive meget værdsat.


REDIGER, yderligere info: Dette er på 32 bit Windows XP på alle maskiner, og undtagelsen findes ikke i min -koden som sådan, men en .NET Framework-hændelseshandler for nogle sortere. Programmet i sig selv laver ikke nogen PostMessage-opkald.

Bedste reference


Mængden af ​​Windows-ressourcer af en bestemt type, som en proces kunne allokere, er kun teknisk begrænset af mængden af ​​virtuel hukommelse, der er tilgængelig for en proces. Hvilket kan være et ret stort antal, især på 64-bit version af Windows. Nogle af disse ressourcer trækkes tilbage fra en intern bunke, hvorfra også alle andre processer trækker sig tilbage. Stadig et meget stort antal, hvis Windows ville lade en -proces forbruge alt.


Det er selvfølgelig ikke fornuftigt, at en proces aldrig får lov til at opsuge alle tilgængelige ressourcer. Det er en kvote, der sætter en øvre grænse for antallet af ressourcer af en bestemt type. Fælles eksempler er 10.000 vinduer , 10.000 GDI objekter, 10.000 håndtag. Ikke alle er hyggelige runde tal som denne btw.


Det ville tage at vide mere om, hvad dit PostMessage () -opkald gør, men et rimeligt gæt er, at det skubber meddelelsens køstørrelse forbi kvoten. Igen er en ressource, som teknisk set kun er begrænset til størrelsen på tilgængelig virtuel hukommelse, men det skal praktisk talt forblive godt syd for det. Hvis det er korrekt, sender du meddelelser hurtigere, end de kan indtages, er det nødvendigt med gasspjæld. Nøjagtigt Når dit program opsiges, foreslås det, at en anden forklaring kan være nødvendig.

Andre referencer 1


Windows 2000/XP: Der er en grænse på 10.000 meddelte meddelelser pr. Besked
kø. Denne grænse skal være tilstrækkelig stor. Hvis din ansøgning overstiger
grænsen, det bør redesignes for at undgå at bruge så mange systemer
ressourcer. For at justere denne grænse ændrer du følgende registreringsnøgle.


HKEY\_LOCAL\_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindowsUSERPostMessageLimit


Den mindste acceptable værdi er 4000.

Andre referencer 2


Det kan være NTFS-kvoter. Yderligere oplysninger finder du på http://technet.microsoft.com/en-us/library/cc786220(WS.10).aspx[3]

Andre referencer 3


Løsningen herfra er: [4]



  Min løsning var at gå til Kontrolpanel> Offline filer og øge mængden af ​​diskplads til rådighed for både offlinefiler generelt og det midlertidige rum (for enkelhedens skyld øgede jeg det med det samme antal antal filer, jeg havde brug for at flytte, men mindre ville sandsynligvis have gjort).