Я хочу знать, смогу ли я оптимизировать отражающую часть моего приложения.
Справочная информация:
Приложение Windows vb.net проверяет, применяются ли записи базы данных к другим правилам. Итак, я создал интерфейс iRule
и (пока) 54 класса правил, которые его реализуют. Все они принадлежат одному и тому же проекту (Rule.dll). Поскольку люди должны настроить их так, чтобы они были активны при определенных условиях, в базе данных также есть таблица tabRule, в которой перечислены все эти правила (с RuleKey / RuleName и т. Д.). Это кажется излишним, но я не видел альтернативы.
Чтобы прийти к точке:
Я создаю экземпляры каждого правила, которое активируется для текущей записи. Поскольку число записей составляет 50000, а число правил - 54, создание экземпляров отнимает много времени. У вас есть идея (общие / статические объекты?) О том, как оптимизировать следующую часть или предложения для различных подходов?
Dim asmRule As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Rule.dll"))
... и позже примерно 2700000 раз ...
' Find the rule in the rules assembly'
Dim ruleObj As Rule.IRule = Nothing, found As Boolean = False
For Each typeAsm As System.Type In asmRule.GetTypes
If typeAsm.GetInterface(GetType(Rule.IRule).FullName) IsNot Nothing Then
ruleObj = CType(asmRule.CreateInstance(typeAsm.FullName, True), Rule.IRule)
If ruleObj.GetKey = ruleRow.RuleKey Then 'ruleRow is the db-counterpart of the rule class'
found = True
Exit For
End If
End If
Next
'..... execute rule if found....'
Спасибо