4

私は数日以来これを理解しようとしているので、テストケースを思いつきました:

  • 新しいasp.net mvcプロジェクトを開始する
  • HomeController.Index で、コードを次のように置き換えます

    var test = new PerformanceCounter("toto", "cac"); return Content("toto");

  • IIS Express を使用するように設定されていることを確認してください

  • デバッグ時にプロジェクトを起動

私のマシンでは、PerformanceCounter 行で永久にハングします。停止ボタンを押すと、次の statcktrace が表示されます。

[Managed to Native Transition]  
mscorlib.dll!Microsoft.Win32.RegistryKey.InternalGetValue(string name, object defaultValue, bool doNotExpand, bool checkSecurity) + 0x5ae bytes 
mscorlib.dll!Microsoft.Win32.RegistryKey.GetValue(string name) + 0x29 bytes 
System.dll!System.Diagnostics.PerformanceMonitor.GetData(string item) + 0x67 bytes  
System.dll!System.Diagnostics.PerformanceCounterLib.GetPerformanceData(string item) + 0xbb bytes    
System.dll!System.Diagnostics.PerformanceCounterLib.CategoryTable.get() + 0x6a bytes    
System.dll!System.Diagnostics.PerformanceCounterLib.CounterExists(string category, string counter, ref bool categoryExists) + 0x1a bytes    
System.dll!System.Diagnostics.PerformanceCounterLib.CounterExists(string machine, string category, string counter) + 0x4f bytes 
System.dll!System.Diagnostics.PerformanceCounter.InitializeImpl() + 0x2eb bytes 
System.dll!System.Diagnostics.PerformanceCounter.PerformanceCounter(string categoryName, string counterName, string instanceName, bool readOnly) + 0x98 bytes   
System.dll!System.Diagnostics.PerformanceCounter.PerformanceCounter(string categoryName, string counterName) + 0x13 bytes   

TestPerfCounter.dll!TestPerfCounter.Controllers.HomeController.Index() 17 行目 + 0x21 バイト C#

何か案が ?開発サーバーに切り替えると、ハングしません...

4

1 に答える 1

0

私は最終的に解決策を見つけます:

http://support.microsoft.com/kb/300956

理由はわかりませんが、解決します

基本パフォーマンス カウンターを再構築します。

拡張可能なカウンター情報は、次の両方の場所に保存されます。 次のレジストリ サブキー: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\Perflib\009 %Systemroot%\System32\Perfc009.dat ファイルと %Systemroot%\System32 \Perfh009.dat ファイル ベース パフォーマンス カウンター ライブラリを手動で再構築するには、次の手順を実行します。 Perfc009.dat ファイルと Perfh009.dat ファイルを展開します。これらのファイルは、Windows インストール ディスクにあります。圧縮ファイルは、DriveLetter:\i386\perfc009.da_ および DriveLetter:\i386\perfh009.da_ にあります。%Systemroot%\System32 フォルダーにあるファイルを置き換えます。レジストリ エディターを起動し、レジストリで次のキーを見つけます。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Perflib レジストリで、Last Counter 値を 1846 (10 進数) に変更し、Last Help 値を 1847 (10 進数) に変更します。Performance サブキーを持つサービスを検索するには、次のレジストリ キーを見つけます。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services Performance サブキーから次の値を削除します (存在する場合)。 exe ツールを使用して、インストールされているパフォーマンス カウンター ダイナミック リンク ライブラリ ファイル (DLL) を見つけ、レジストリにアクセスして DWORD 値を削除します。これで、システム ベース カウンターのみを含む実行可能なパフォーマンス レジストリが作成されました。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services Performance サブキーから次の値を削除します (存在する場合)。 First Counter First Help Last Counter Last Help Exctrlst.exe ツールを使用して、パフォーマンス カウンターのダイナミック リンク ライブラリ ファイル (DLL ) がインストールされていることを確認し、レジストリにアクセスして DWORD 値を削除します。これで、システム ベース カウンターのみを含む実行可能なパフォーマンス レジストリが作成されました。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services Performance サブキーから次の値を削除します (存在する場合)。 First Counter First Help Last Counter Last Help Exctrlst.exe ツールを使用して、パフォーマンス カウンターのダイナミック リンク ライブラリ ファイル (DLL ) がインストールされていることを確認し、レジストリにアクセスして DWORD 値を削除します。これで、システム ベース カウンターのみを含む実行可能なパフォーマンス レジストリが作成されました。

注: レジストリの Performance サブキーから値を削除すると、インストールされている .NET Framework アプリケーションが次回起動したときに機能しなくなる可能性があります。これが発生した場合は、「拡張可能なカウンターを再追加する」セクションで lodctr /R コマンドを使用して、パフォーマンス カウンターを再構築します。.NET Framework アプリケーションの起動時に引き続き問題が発生する場合は、この記事の「カスタム .NET Framework アセンブリ パフォーマンス カウンターを再インストールする」セクションを参照してください。

于 2013-10-30T15:46:56.183 に答える