Есть ли недостатки в производительности при использовании CallByName
function в VB.NET? Есть ли лучший способ выполнить вызов по имени в .NET 2.0 и далее.Недостатки функции CallbyName в VB.NET?
ответ
CallByBame в основном дает вам «позднюю привязку», которая «вычисляет метод во время выполнения», в отличие от «раннего связывания», когда компилятор определяет это для вас.
С ранним связыванием вы можете быть безопасным по типу, и у вас будет более высокая производительность, так как ваш код пойдет прямо к методу. Компилятор будет «искать его» для вас раньше времени.
С более поздним временем выполнения привязки медленнее, так как метод проверяется во время выполнения, и у вас нет безопасности типа, что означает, что метод может фактически не существовать, и вы можете получить исключение. Но это может быть удобно, если вы не знаете тип объекта по какой-то причине. Я также использую его для вызова COM-объекта, если я не хочу вмешиваться в сборку interop.
CallByName, скорее всего, вызывает Type.InvokeMember. Если вы хотите сделать это непосредственно, вот некоторый код, я придумал:
Imports System.Reflection ' For access to BindingFlags '
Friend NotInheritable Class LateBinding
Private Const InvokePublicMethod As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod
Private Const GetPublicProperty As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.GetProperty
Public Shared Function InvokeFunction(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, InvokePublicMethod, Nothing, oObject, yArguments)
End Function
Public Shared Function GetProperty(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, GetPublicProperty, Nothing, oObject, yArguments)
End Function
End Class
«Сесил имеет имя» верны в том, что CallByName не кэширует что-либо. Если вы неоднократно вызываете одни и те же методы таким образом, вам нужно каким-то образом кэшировать информацию о типе. Вещи могут действительно замедлить, если вы этого не сделаете. –
Если функция CallByName
не метод привязки кэша, было бы гораздо лучше, чтобы написать свой собственный класс доставки, который хранит хэш-таблицу для отображения имена строк до MethodInfo
объектов.
- 1. Недостатки объединения C# .NET и VB.NET
- 2. CallByName, set BackColor
- 3. Синтаксис CallByName Outlook VBA
- 4. VB6 CallByName woes
- 5. Каковы недостатки функции запирания
- 6. Использование CallByName для установки свойства Item (x)
- 7. Передача массива аргументов в CallByName VBA
- 8. Недостатки для переопределения функции isValid() в Zend_Form
- 9. Преимущества/Недостатки передачи функции в конструктор отложенных
- 10. сумма функции в vb.net
- 11. Общие функции в VB.NET
- 12. Общие функции в VB.Net
- 13. Использование callbyname для проверки list.contains (x)
- 14. Как указать модуль кода как параметр Object Ref в VB.Net CallByName?
- 15. Есть ли эквивалент CallByName для глобальных функций?
- 16. Недостатки функции .toStringing node.js на стороне сервера
- 17. вызов одной функции другой функции в VB.Net
- 18. callbyname работает с элементом массива as procname
- 19. Использование функции «IsNumeric» в vb.net
- 20. Использование Основной функции в vb.net
- 21. печать выходной функции в vb.net
- 22. Запись функции кеша в VB.NET
- 23. Тайна функции If() в VB.NET
- 24. функции асинхронной в mvc4 vb.net
- 25. Что случилось с передачей меня в качестве параметра в функции CallbyName под vb6?
- 26. Вызов функции Sub или Function, содержащейся в модуле с использованием «CallByName» в VB/VBA
- 27. Функции Threading с VB.net
- 28. В чем преимущества/недостатки функции маркировки IsMacroType в Excel-DNA?
- 29. Parse XML string в VB.NET
- 30. Использование CallByName с «событием sink» для поля в форме
Я не знаком с CallByName, в каком контексте вы его используете? У вас есть пример? –
CallByName будет использовать отражение. Итак, я не знаю, есть ли другой способ. Не могли бы вы описать сценарий, в котором вы используете CallByName? Это поможет определить, если вам нужно CallByName или что-то еще. – shahkalpesh