Pregunta

Tengo que hacer la reflexión y el enlace en tiempo, así que no sé si hay una manera de acelerar las cosas. Pensé que iba a darle un tiro.

Este fragmento se tarda unos 15 segundos para completar el cual es demasiado lento, pero al ver la forma en que necesito para leer los metadatos.

private static object InvokeCall(Type HostObjectType, Object HostObject, CallType callType, string PropertyOrMethodName, object[] args)
{
    if (callType == CallType.Method)
    {
        return MyObjectType.InvokeMember(PropertyOrMethodName,System.Reflection.BindingFlags.InvokeMethod, null, myObject, args);
    }
}
¿Fue útil?

Solución

I suponer que 15s es cuando se utiliza en un bucle; reflexión no es que lento.

Se puede acelerar la reflexión (e invocar en particular) mediante la obtención de la MethodInfo y el uso de Delegate.CreateDelegate una vez . A continuación, caché y volver a utilizar el delegado resultante escrita (que coincide con el de la firma llamada esperada). A continuación, utilice el delegado mecanografiado Invocar.

Nota sin tipo de invocación delegado es lento; que se debe escribir. También; puede ser astuto y utilizar un delegado con un parámetro adicional (líder) para invocar un ejemplo método contra una gama de diferentes objetos, si necesita el objeto de destino al cambio por llamada.

En escenarios más complejos, expresión o DynamicMethod son útiles.

Otros consejos

Tome un vistazo a Fasterflect - Una rápida y simple reflejo API y Fast invocador que están listos para utilizar las soluciones e interesante para el estudio.

Si quieres ir por sus artículos de verificación manera: de Dodge rendimiento Errores comunes en Craft Speedy Aplicaciones y compilado dinámicamente Lambdas vs puro reflejo

Trate de usar un árbol de expresión lambda compilado y almacenar en caché el lambda. He apalancadas esto extensamente con gran éxito.

http://kohari.org / 2009/03 /, 06 / /

rápido tardía invocación-con-expresión de los árboles con destino
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top