Esto es similar en espíritu a ICorProfilerCallback::JITCompilationStarted
cuando se combina con ICorProfilerInfo::SetILFunctionBody
, pero con más restricciones. Las clases ICorProfiler*
se pueden usar para hacer instrumentación en tiempo de ejecución para casi cualquier método administrado. Hay perfiladores y depuradores que los utilizan para recopilar información sobre un proceso en ejecución.
Puede usar MethodRental
para el código del instrumento con fines de diagnóstico. Algunos ejemplos:
- La función entrar/salir le daría un seguimiento de ejecución que podría usar para derivar datos de creación de perfiles.
- La instrumentación de primitivas de sincronización puede ayudarlo a diagnosticar las condiciones de carrera.
- La instrumentación de bloques básicos puede ayudarlo a determinar la cobertura del código.
También puede usar MethodRental
para mejorar la funcionalidad del código existente. Aspect-oriented programming viene a la mente. Podría 'tejer' en seguridad, registro u otras preocupaciones de diseño transversales en el código existente. Sin embargo, esto requeriría algún otro recurso (XML, una biblioteca de C#) para expresar sus aspectos.
Finalmente, podría usar MethodRental
para "desviar" el código existente, es decir, las llamadas al método de interceptación para crear un tipo de polimorfismo de tiempo de ejecución. Por ejemplo, si tiene un código de cliente que usa alguna clase generada dinámicamente RegistryStore
para obtener alguna configuración a través de GetConfig
, puede reescribir el IL del método para cambiar la implementación de RegistryStore.GetConfig
para usar el sistema de archivos en su lugar. Puede hacer esto sin tener que cambiar el código del cliente.
No se puede usar MethodRental para AOP ya que solo admite métodos dinámicos, ¿o sí? – Giorgi
@Giorgi: lo siento, no quise ser engañoso. Puede usarlo para AOP, pero seguirá teniendo las mismas limitaciones que 'MethodRental' impone: específicamente, que solo puede usarlo en métodos/conjuntos dinámicos. Dependiendo de lo que trates de hacer, puede que no sea útil en absoluto. Sin embargo, todos los usos que enumeré tienen la misma restricción fundamental. –
Gracias por su respuesta. Como la restricción es muy limitada, es porque no podía pensar en un posible uso. – Giorgi