2010-12-07 4 views
5

Dans une application C# .Net MVC2, nous avons une fonction simple pour obtenir l'identifiant du processeur dans le cadre d'un schéma d'identification du serveur web. La partie pertinente est:ManagementObjectRecherche out of memory excepiton

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select ProcessorId from Win32_Processor")) 
     { 
      foreach (ManagementObject share in searcher.Get()) 
      { 
       foreach (PropertyData PC in share.Properties) 
       { 
        return PC.Value.ToString(); 
       } 
      } 
     } 

il travaille bien dans dev et sur un certain nombre de serveurs Web exécutant IIS et Cassini. Toutefois, lors de la dernière installation sur un ordinateur Server 2008, il lance une exception Out of Memory lors du premier appel pour obtenir l'ID du processeur. Tout conseil sur une cause possible ou un meilleur moyen d'atteindre ce qui précède.

Merci beaucoup

Modifier pour inclure la trace de la pile:

System.Management.ManagementException: Out of memory 


at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 
    at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext() 
    at GIB.Helpers.SoftwarehouseLicenseAttribute.GetProcessorID() in C:\Users\Dog\Documents\Visual Studio 2010\Projects\GIB\GIB\Helpers\SoftwarehouseLicense.cs:line 177 
    at GIB.Helpers.SoftwarehouseLicenseAttribute.setup() in C:\Users\Dog\Documents\Visual Studio 2010\Projects\GIB\GIB\Helpers\SoftwarehouseLicense.cs:line 75 
    at GIB.Controllers.HomeController.Setup() in C:\Users\Dog\Documents\Visual Studio 2010\Projects\GIB\GIB\Controllers\HomeController.cs:line 37 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+1

Affiche la trace de pile de l'exception. –

Répondre

7

Je viens de rencontrer un problème similaire, en essayant d'interroger le Win32_Service. Je suis allé à la console WMI sous Administrative Tools\Computer Management. L'écran principal a affiché une erreur Out of Memory pour Win32_Process. J'ai fini par redémarrer le service WMI ("Windows Management Instrumentation") et cela a résolu le problème.

+2

Il existe un bogue connu dans les versions récentes de WMI lors de l'interrogation de Win32_Service. Voir, par exemple, http://brooke.blogs.sqlsentry.net/2010/02/win32service-memory-leak.html. Je ne suis pas sûr que cela s'applique à d'autres classes WMI. –

+0

J'ai rencontré le même problème. Redémarrez le service WMI ("Windows Management Instrumentation") et cela a résolu le problème. Merci, – sean717

+0

J'ai également couru dans cette interrogation 'Win32_Printer' – Cameron

Questions connexes