Questo è simile nello spirito a ICorProfilerCallback::JITCompilationStarted
quando accoppiato con ICorProfilerInfo::SetILFunctionBody
, ma con più vincoli. Le classi ICorProfiler*
possono essere utilizzate per eseguire la strumentazione runtime per quasi tutti i metodi gestiti. Esistono profiler e debugger che li utilizzano per raccogliere informazioni su un processo in esecuzione.
È possibile utilizzare MethodRental
nel codice dello strumento per scopi diagnostici. Alcuni esempi:
- Funzione enter/exit fornirebbe una traccia di esecuzione che è possibile utilizzare per ricavare dati di profilatura da.
- Le primitive di sincronizzazione dello strumento possono aiutarti a diagnosticare condizioni di gara.
- La strumentazione dei blocchi di base può aiutare a determinare la copertura del codice.
È inoltre possibile utilizzare MethodRental
per migliorare la funzionalità del codice esistente. Mi viene in mente Aspect-oriented programming. Si potrebbe "tessere" in sicurezza, logging o altri problemi di progettazione trasversali nel codice esistente. Ciò richiederebbe qualche altra funzione (XML, una libreria C#) per esprimere i tuoi aspetti, comunque.
Infine, è possibile utilizzare MethodRental
per "deviare" il codice esistente, ad esempio le chiamate al metodo di intercettazione per creare un tipo di polimorfismo di runtime. Ad esempio, se si dispone di codice client che utilizza una classe generata dinamicamente RegistryStore
per ottenere una configurazione tramite GetConfig
, è possibile riscrivere l'IL del metodo per modificare l'implementazione di RegistryStore.GetConfig
per utilizzare invece il file system. Puoi farlo senza dover cambiare il codice cliente.
fonte
2010-05-27 10:24:54
Non è possibile utilizzare MethodRental per AOP poiché supporta solo metodi dinamici, puoi? – Giorgi
@Giorgi: scusa, non volevo essere fuorviante. Puoi usarlo per AOP, ma avrai ancora gli stessi vincoli che 'MethodRental' impone: in particolare, puoi usarlo solo su metodi/assiemi dinamici. A seconda di cosa stai cercando di fare, potrebbe non essere affatto utile. Tutti gli usi che ho elencato hanno lo stesso vincolo fondamentale, però. –
Grazie per la risposta. Poiché il vincolo è molto limitato, è perché non riesco a pensare a un possibile utilizzo. – Giorgi