我有一個C#應用程序,它啓動時添加了一些性能計數器。但是,如果註冊表HKEY_LOCAL_MACHINE-> SOFTWARE-> Microsoft-> Windows NT-> CurrentVersion-> Perflib已損壞(丟失或無效數據),檢查性能計數器(PerformanceCounterCategory.Exists(category)是否存在的操作確實需要很長時間(約30秒)才終於拋出異常(InvalidOperation:類別不存在)
我的問題是我如何在嘗試添加性能計數器(以及什麼有效性的方法)之前驗證註冊表的有效性,或者如果有一種方法我可以超時性能計數器操作,以便它不需要30秒來得到一個異常。性能計數器註冊表驗證
回答
我懷疑「有效性」是一個內部實現細節,你不知道。但是,您至少可以嘗試打開相同的註冊表項並查看如果它們存在。您可以使用Process Explorer來確定它正在讀取哪些鍵。
但是,我質疑你爲什麼會關心。損壞的註冊表不應該是一件非常常見的事情,如果是這樣,你會怎麼做?你所能做的就是退出。所以你可能只是趕上例外。我會像其他任何阻止操作一樣對待它,並在工作線程(而不是UI線程)上執行此操作,並向用戶顯示進度,以便他們知道您的應用程序未掛起。
你確定註冊表已損壞嗎?
我發現我的程序沒有權限在運行時創建性能計數器。相反,我將計數器的創建添加到了我的安裝程序,並且安裝程序必須以管理員身份運行。在運行時,我的程序在訪問或更新已經創建的計數器時沒有問題。
這不是權限的問題,因爲我已經有一個適當的檢查,以確保用戶具有管理員權限。註冊表中的條目沒有價值,因此在30秒後拋出異常。事實上,我不在乎我是否得到異常,只要不需要30秒即可得到它 – anchandra 2010-03-22 23:45:44
我不知道如何回答你提出的問題,但如果我理解正確,問題是它看起來像用戶啓動時掛起應用程序長達30秒。
如果是這樣的話,我建議你可以通過創建一個工作者線程來避免這種情況,告訴它創建性能監視器,然後繼續啓動應用程序。
我還沒有與性能計數器合作過,所以我不能說是否有什麼會阻止它工作?
- 1. 無法註冊Oracle性能計數器
- 2. 註冊性能計數器沒有lodctr
- 3. 取消註冊性能計數器
- 4. 數據庫設計:註冊和驗證
- 5. 以編程方式在註冊表中註冊性能計數器
- 6. 驗證fosuserbundle註冊表格
- 7. android註冊表單驗證
- 8. PHP註冊表單驗證
- 9. joomla註冊表單驗證
- 10. PHP驗證註冊表
- 11. 註冊驗證
- 12. 在註冊表中驗證數據
- 13. 設計驗證不斷註冊失敗
- 14. 我更改默認註冊路徑後,設計不驗證註冊表格
- 15. 表面試圖從註冊表中獲取性能計數器並失敗
- 16. Portainer註冊表身份驗證
- 17. 註冊表單驗證在PHP
- 18. 註冊表格驗證錯誤
- 19. 在wordpress中註冊表單驗證
- 20. 自定義Wordpress註冊表與驗證
- 21. 註冊和驗證表單與angularjs
- 22. 在android中驗證註冊表
- 23. 註冊表達驗證/ \#&字符
- 24. Facebook,如何驗證註冊表單?
- 25. 如何驗證註冊表腳本
- 26. 註冊表單(驗證電子郵件)
- 27. OpenID身份驗證的註冊表
- 28. 驗證用戶註冊表格
- 29. 模型驗證和註冊
- 30. Imacros用驗證碼註冊
我關心它,因爲它會影響產品的用戶體驗,雖然我同意你無效的註冊表項不應該是一種常見事件,但我仍然需要覆蓋此場景。我問這個問題,希望別人碰到這個障礙,並有一個更具體的解決方案。無論如何,謝謝 – anchandra 2010-03-22 23:43:21
是的,我認爲你所能做的最好的事情不是掛起並處理它,而不是試圖預測它會發生。也許有更好的方法。 – 2010-03-23 06:14:03