2010-12-07 14 views
5

C#.Net MVC2アプリでは、Webサーバーを識別するスキームの一部としてプロセッサIDを取得する簡単な機能があります。関連する部分は次のとおりです:ManagementObjectSearcher 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(); 
       } 
      } 
     } 

これは、devと、cassiniとIISを実行するいくつかのWebサーバーでうまくいきました。しかし、Server 2008マシンの最新のインストールでは、最初の呼び出しでOut of Memory Exceptionがスローされ、プロセッサIDが取得されます。上記を達成するための可能な原因またはよりよい方法に関するアドバイス。

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でWMIコンソールに行きました。メイン画面にWin32_Processのメモリ不足エラーが表示されました。 WMIサービス(Windows Management Instrumentation)の再起動が終了し、問題が修正されました。

+2

Win32_Serviceを照会する際に、最近のバージョンのWMIに既知のバグがあります。たとえば、http://brooke.blogs.sqlsentry.net/2010/02/win32service-memory-leak.htmlを参照してください。私はそれが他のWMIクラスに当てはまるかどうかはわかりません。 –

+0

私は同じ問題に遭遇しました。 WMIサービス(Windows Management Instrumentation)を再起動し、問題を修正しました。ありがとう、 – sean717

+0

私はまた、このWin32_Printerクエリを実行しました – Cameron