无论如何,调查记录都非常慢,以避免这种情况?
-
09-10-2019 - |
题
我必须进行反思和较晚的绑定,所以我不知道是否有办法加快事情的速度。以为我会试一试。
这个片段大约需要15秒才能完成,这太慢了,但是看看我需要阅读元数据。
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);
}
}
解决方案
我认为15s是在循环中使用的;反思不是 那 减缓。
您可以通过获得MethodInfo并使用delegate.createdelegate加快反思(并特别调用)加快反思(并特别调用)加快速度 一次. 。然后,您缓存并重新使用结果 打字 委托(与预期的呼叫签名匹配)。然后使用键入的代表调用。
注意未经类似的委托调用很慢;必须键入。还;您可以偷偷摸摸,并使用带有额外(领先)参数的代表来调用 实例 如果您需要目标对象来更改每句话,则针对一系列不同对象的方法。
对于更复杂的场景,表达或动态方法很有用。
其他提示
look 更快 - 快速而简单的反射API 和 快速调用 他们准备使用解决方案并有趣的研究。
如果您想以自己的方式走,请检查文章: 道奇共同的性能陷阱用于制作快速应用 和 动态编译的Lambdas与纯反射
尝试使用表达树编译的lambda并缓存lambda。我已经取得了巨大的成功利用这一点。
http://kohari.org/2009/03/06/fast-late-bound-invocation-with-expression-trees//
不隶属于 StackOverflow