Pérdidas de control de eventos en una .NET Framework basada en 4 aplicaciones

Este artículo le ayuda a resolver las pérdidas de control de eventos en una .NET Framework 4 aplicaciones basadas en.

Versión del producto original:   Microsoft .NET Framework 4
Número KB original:   2973904

Resumen

Este problema puede producirse incluso cuando la aplicación está inactiva. Además, si examina el proceso de esta aplicación mediante una herramienta de depuración, la pila es similar a la siguiente en la que se asignan los controladores de eventos:

ntdll! ZwCreateEvent
kernelbase! CreateEventExW+0x6e
kernelbase! CreateEventW+0x27
clr! CLREvent::CreateManualEvent+0x3b
clr! Thread::AllocHandles+0xa3
clr! Thread::CreateNewOSThread+0x85
clr! Thread::CreateNewThread+0xa9
clr! ThreadpoolMgr::CreateUnimpersonatedThread+0xbb
clr! ThreadpoolMgr::CreateWorkerThread+0x19
clr! ThreadpoolMgr::EnsureEnoughWorkersWorking+0x116
clr! ThreadpoolMgr::AddWorkingWorker+0x12
clr! UnManagedPerAppDomainTPCount::D ispatchWorkItem+0x266
clr! ThreadpoolMgr::NewWorkerThreadStart+0x20b
clr! ThreadpoolMgr::WorkerThreadStart+0x3d1
clr! Thread::intermediateThreadProc+0x4b
kernel32! BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x70
ntdll!_RtlUserThreadStart+0x1b

Causa

El problema se produce porque .NET Framework no recuperará inmediatamente la memoria asociada a estos controladores. Los controladores solo se recuperan cuando se ejecuta una recolección de elementos no utilizados. En algunas aplicaciones, la recolección de elementos no utilizados se produce en raras ocasiones, ya que la aplicación rara vez asigna objetos administrados.

Solución

Para resolver este problema, actualice del .NET Framework 4 a la versión más reciente del .NET Framework 4.5.

Solución alternativa

Para evitar este problema en el .NET Framework 4, llame al método cuando la aplicación necesite GC.Collect() recuperar los controladores inmediatamente.