2011-12-26 91 views
0

我正在构建一个网站,当某些操作完成时将发送电子邮件通知。截至目前,我有一个通用的通知功能,被称为在某些领域的参数引用数据库记录,包含消息等。通过指定函数名称触发函数

我想知道是否有任何方法可以使像这样动态触发,因此在网站的不同区域添加/删除触发器不需要隐藏更改。我正在考虑用反射和命名空间/函数来调用从数据库加载的触发器,但我会想象这会对性能产生重大影响。

+0

是什么让你认为会对性能产生重大影响? – 2011-12-26 19:01:06

+0

我想我的担心源于这样一个事实,即我不知道如何通过反射来实现适当的解决方案,并且假设将会有大量额外的检查来查看哪些函数应该执行触发器。更多地思考它,我可以看到我的担忧可能不合理。 – 2011-12-26 19:47:49

回答

1

反射确实没有那么大的性能影响,尤其是当您在第一次查找之后考虑缓存函数指针时。

这是一个简单的秒杀,可能无法编译或工作,但应该让你在正确的道路上:

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

Parser是一个MethodInfo对象,并可以缓存供以后使用。调用invoke并不比直接调用DateTime.Parse更糟糕。如果我不得不猜测,最慢的调用是Type.GetType,即使这样,尽管我们并没有谈论很多时间,毫无疑问在ms级别上。

如果您还可以提供更多信息,那么有人可能会指出您甚至有更好的方向。也许一些DI或IoC信息是​​相关的。

+1

'调用invoke不会比直接调用DateTime.Parse更糟糕。“你试过了吗?我做了,而“Invoke”慢了2倍。但是,这并不意味着@ Eclyps19应该避免在规模上使用反射 – 2011-12-26 19:10:12

+1

@ L.B?秒,毫秒,纳秒?让我稍微改写一下,他/她正在编写一个Web应用程序,反思应该是他们对性能问题的最小担忧。 – neouser99 2011-12-26 19:13:02

+0

'你正在编写一个web应用程序,反思应该是你的担忧,当涉及到性能'是的我说的一样。但我只想指出反思总是比直接调用慢。尝试看看 – 2011-12-26 19:15:20