2010-12-07 15 views
5

सी # .NET MVC2 ऐप में हमारे पास वेब सर्वर की पहचान करने के लिए किसी योजना के हिस्से के रूप में प्रोसेसर आईडी प्राप्त करने के लिए एक सरल कार्य है। प्रासंगिक भाग है:प्रबंधन exbpiton से बाहर प्रबंधन ऑब्जेक्ट खोजकर्ता

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(); 
       } 
      } 
     } 

यह देव में और कैसिनी और आईआईएस चलाने वाले कई वेब सर्वर पर ठीक काम कर रहा है। हालांकि सर्वर 2008 मशीन पर नवीनतम स्थापना पर यह प्रोसेसर आईडी प्राप्त करने के लिए पहली कॉल पर आउट ऑफ़ मेमोरी अपवाद फेंक रहा है। उपरोक्त प्राप्त करने के संभावित कारण या बेहतर तरीके पर कोई सलाह।

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

अपवाद के स्टैक ट्रेस दिखाएं। –

उत्तर

7

मैं सिर्फ एक समान मुद्दे में भाग गया, Win32_Service क्वेरी करने के लिए कोशिश कर रहा है:

कई धन्यवाद

संपादित स्टैक ट्रेस शामिल करने के लिए। मैं Administrative Tools\Computer Management के तहत डब्लूएमआई कंसोल गया था। मुख्य स्क्रीन ने Win32_Process के लिए आउट ऑफ़ मेमोरी त्रुटि दिखायी। मैंने डब्लूएमआई सेवा ("विंडोज मैनेजमेंट इंस्ट्रुमेंटेशन") को पुनरारंभ करना समाप्त कर दिया और इस मुद्दे को ठीक किया।

+2

Win32_Service के लिए पूछताछ करते समय WMI के हाल के संस्करणों में एक ज्ञात बग है। उदाहरण के लिए, http://brooke.blogs.sqlsentry.net/2010/02/win32service-memory-leak.html देखें। मुझे यकीन नहीं है कि यह अन्य डब्ल्यूएमआई कक्षाओं पर लागू होता है। –

+0

मैं एक ही समस्या में भाग गया। डब्लूएमआई सेवा ("विंडोज मैनेजमेंट इंस्ट्रुमेंटेशन") को पुनरारंभ किया और समस्या को ठीक किया। धन्यवाद, – sean717

+0

मैं इस क्वेरीिंग 'Win32_Printer' – Cameron

संबंधित मुद्दे