Я читаю «Отражение», и, похоже, это хорошо подходит для моего приложения, но у меня есть некоторые проблемы, в основном вокруг производительности. Вот мой класс ниже. MyObject может создаваться 20 раз на запрос страницы, что означает, что CreateInstance будет выполняться только около 20 раз на страницу, макс. Вопрос 1: Могу ли я быть доволен этим тем, что это не влияет на производительность таким значительным образом?Использование Reflection в .net 4.0 для запуска функции несколько раз
Моя основная забота заключается в том, что 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
Edit: Что делать, если я сделал это ...
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
Откуда берутся названия типов и функций? Можете ли вы изменить свой подход, чтобы вам не приходилось полагаться на отражение при запуске приложения? Например. сохраняйте отображение из строки делегатам, которые создают ваш объект и запускают функцию. – fsimonazzi
В моем приложении блок разметки XML загружен и встроен в это имя имени типа и функции, которое должно выполняться (возможно, сотни раз). Я не уверен, как сопоставить строку с делегатом и запустить функцию и т. Д., Которая заменит мой код выше. – Mike
Итак, я добавил еще один фрагмент кода. Если это поиск метода MethodInfo, который занимает больше всего времени, могу ли я не просто хранить его локально. Если он запускается сто раз на страницу, то он получает MethodInfo один раз и только извлекает его из bolMethodInfo, если он эффективно использует его еще 99 раз? См. Отредактированный код. – Mike