我一直在阅读Reflection,它似乎非常适合我的应用程序,但我有一些担忧,主要是关于性能。这是我下面的课程。每页请求可能会创建20次MyObject,这意味着CreateInstance每页最多只执行20次,最多。问题1:我能否对此感到满意,因为这不会以如此显着的方式影响性能?
我主要担心的是每个页面请求可能会调用RunFunction 100次。所以,问题2:这会不会影响性能,如果有的话,还有更好的方法吗?
我的应用程序确实知道在SomeClassName中命名的所有类,但它只是不知道WHEN在运行时之前执行objDynamic函数。
问题3:对于反射性能,他们的.net 4.0有了显着的改进吗?
感谢您抽出宝贵时间。
Class MyObject
dim objDynamic as object = nothing
public sub new(SomeClassName as String)
objDynamic = Activator.CreateInstance(Type.[GetType](SomeClassName))
end sub
Public function RunFunction(strFunctionName As String) As Object
Dim thisType As Type = objDynamic.[GetType]()
Dim theMethod As System.Reflection.MethodInfo = thisType.GetMethod(strFunctionName)
dim objResult as Object = theMethod.Invoke(objDynamic, nothing)
return objResult
End Function
end class
编辑:如果我这样做会怎么样......
Class MyObject
dim objDynamic as object = nothing
Public bolMethodInfo As New List(Of System.Reflection.MethodInfo)
public sub new(SomeClassName as String)
objDynamic = Activator.CreateInstance(Type.[GetType](SomeClassName))
end sub
Public function RunFunction(strFunctionName As String) As Object
Dim thisType As Type = objDynamic.[GetType]()
Dim theMethod As System.Reflection.MethodInfo = Nothing
For Each mi As System.Reflection.MethodInfo In bolMethodInfo
If mi.Name = strFunctionName Then
theMethod = mi
Exit For
End If
Next
If theMethod Is Nothing Then
theMethod = thisType.GetMethod(strFunctionName)
bolMethodInfo.Add(theMethod)
End If
dim objResult as Object = theMethod.Invoke(objDynamic, nothing)
return objResult
End Function
end class
答案 0 :(得分:1)
This(第二个答案)提出了一种使用反思和削减成本的方法。
答案 1 :(得分:0)
Early optimization is the root of all evil。尝试分析您的应用程序,看看您是否正在尝试优化正确的代码。执行20次通常不是很多,20万次。当然,取决于案例,首先是个人资料,然后再决定。是的,如果做得好,转换到Reflection可以更快,最多10次,IIRC。但它造成的维护噩梦并不值得(大部分时间)。