2010-05-17 86 views

回答

6

當與ICorProfilerInfo::SetILFunctionBody配對時,這與ICorProfilerCallback::JITCompilationStarted的精神類似,但有更多限制。 ICorProfiler*類可用於爲幾乎任何託管方法執行運行時檢測。有分析器和調試器使用這些來收集有關正在運行的進程的信息。

您可以使用MethodRental來進行診斷目的的儀器代碼。一些例子:

  • 功能輸入/退出會給你一個執行軌跡,你可以用它來派生分析數據。
  • 檢測同步原語可以幫助您診斷競爭條件。
  • 檢測基本塊可幫助您確定代碼覆蓋率。

您還可以使用MethodRental來增強現有代碼的功能。想起Aspect-oriented programming。您可以將安全性,日誌記錄或其他橫切設計問題「編織」到現有代碼中。然而,這需要其他一些工具(XML,一個C#庫)來表達你的方面。

最後,你可以使用MethodRental爲「彎路」現有的代碼,即攔截方法調用,以創建一種運行時多態性。例如,如果您有使用一些動態生成的類RegistryStore通過GetConfig得到一些配置客戶端的代碼,你可以重寫方法的IL改變RegistryStore.GetConfig執行使用文件系統來代替。你可以做到這一點,而無需更改客戶端代碼。

+0

您不能使用MethodRental for AOP,因爲它只支持動態方法,對嗎? – Giorgi 2010-05-27 10:57:43

+1

@Giorgi:對不起,我的意思不是誤導。您可以將它用於AOP,但您仍然會擁有'MethodRental'強加的相同約束:具體而言,您只能在動態方法/程序集上使用它。根據你想要做的事情,這可能根本沒用。儘管我列出的所有用途都具有相同的基本約束。 – 2010-05-27 11:16:39

+0

感謝您的回答。由於限制條件非常有限,這是因爲我無法想到可能的用法。 – Giorgi 2010-05-27 11:46:55

6

不確定你的意思是什麼限制。顯然,這隻能在MethodBuilder生成的動態生成的方法上運行。從裝配中加載的IL編譯JIT的類方法不能被替換。

用例將實現動態語言的運行時,該動態語言支持更改已定義類的方法(猴子修補)。像Ruby,Python,Javascript等的語言