2011-12-26 2 views
0

Я создаю сайт, который отправит уведомление по электронной почте, когда будут выполнены определенные действия. На данный момент у меня есть общая функция уведомления, которая вызывается в определенных областях с параметрами для ссылки на запись базы данных, содержащую сообщение, и т. Д.Функция триггера, указав название функции

Я хотел бы знать, есть ли способ сделать триггер, подобный этой динамике, поэтому добавление/удаление триггеров в разных областях веб-сайта не требует изменений кода. Я думал что-то с отражением, а пространство имен/функция вызывало запуск триггера из базы данных, но я бы предположил, что это будет иметь значительное влияние на производительность.

+0

Что заставляет вас думать, что будет «значительное влияние на производительность»? –

+0

Я полагаю, что мои проблемы связаны с тем, что я не знаю, как реализовать правильное решение посредством отражения, и предположил, что будет значительное количество дополнительных проверок, чтобы увидеть, какие функции должны запускать триггер. Думая об этом больше, я вижу, что мои проблемы, вероятно, иррациональны. –

ответ

1

Отражение действительно не имеет такого большого влияния производительности, особенно когда вы учитываете кеширование указателей функций после первого поиска.

Это простой колос, не может скомпилировать или работать, но должны получить вы на правильном пути:

var type = Type.GetType("System.DateTime"); 
var parser = type.GetMethod("Parse"); 
Console.WriteLine(parser.Invoke(null, "2012-01-01 12:00")); 

Parser является объектом MethodInfo, и может быть в кэше для последующего использования. Вызов вызова не хуже, чем вызов DateTime.Parse. Если бы мне пришлось угадать, самый медленный вызов - Type.GetType, даже тогда, хотя мы не говорим о большом количестве времени, определенно в масштабе ms.

Если вы можете дать немного больше информации, возможно, кто-то может указать вас в лучшем направлении. Может быть, небольшая информация DI или IoC уместна.

+1

'Вызов вызова не хуже, чем вызов DateTime.Parse напрямую.' Вы пробовали? Я сделал, а 'Invoke' - в 2 раза медленнее. Но это не значит, что @ Eclyps19 следует избегать использования отражения –

+1

@ L.B, в каком масштабе? секунды, миллисекунды, наносекунды? Позвольте мне немного перефразировать, он/она пишет веб-приложение, размышление должно быть наименьшим из их забот, когда дело доходит до производительности. – neouser99

+0

'Вы пишете веб-приложение, размышление должно быть наименьшим из ваших забот, когда дело доходит до производительности' Да, я говорю то же самое. Но я просто хотел указать, что отражение всегда медленнее, чем прямой вызов. Попробуй и посмотри –

Смежные вопросы