我正在構建一個網站,當某些操作完成時將發送電子郵件通知。截至目前,我有一個通用的通知功能,被稱爲在某些領域的參數引用數據庫記錄,包含消息等。通過指定函數名稱觸發函數
我想知道是否有任何方法可以使像這樣動態觸發,因此在網站的不同區域添加/刪除觸發器不需要隱藏更改。我正在考慮用反射和命名空間/函數來調用從數據庫加載的觸發器,但我會想象這會對性能產生重大影響。
我正在構建一個網站,當某些操作完成時將發送電子郵件通知。截至目前,我有一個通用的通知功能,被稱爲在某些領域的參數引用數據庫記錄,包含消息等。通過指定函數名稱觸發函數
我想知道是否有任何方法可以使像這樣動態觸發,因此在網站的不同區域添加/刪除觸發器不需要隱藏更改。我正在考慮用反射和命名空間/函數來調用從數據庫加載的觸發器,但我會想象這會對性能產生重大影響。
反射確實沒有那麼大的性能影響,尤其是當您在第一次查找之後考慮緩存函數指針時。
這是一個簡單的秒殺,可能無法編譯或工作,但應該讓你在正確的道路上:
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信息是相關的。
'調用invoke不會比直接調用DateTime.Parse更糟糕。「你試過了嗎?我做了,而「Invoke」慢了2倍。但是,這並不意味着@ Eclyps19應該避免在規模上使用反射 – 2011-12-26 19:10:12
@ L.B?秒,毫秒,納秒?讓我稍微改寫一下,他/她正在編寫一個Web應用程序,反思應該是他們對性能問題的最小擔憂。 – neouser99 2011-12-26 19:13:02
'你正在編寫一個web應用程序,反思應該是你的擔憂,當涉及到性能'是的我說的一樣。但我只想指出反思總是比直接調用慢。嘗試看看 – 2011-12-26 19:15:20
是什麼讓你認爲會對性能產生重大影響? – 2011-12-26 19:01:06
我想我的擔心源於這樣一個事實,即我不知道如何通過反射來實現適當的解決方案,並且假設將會有大量額外的檢查來查看哪些函數應該執行觸發器。更多地思考它,我可以看到我的擔憂可能不合理。 – 2011-12-26 19:47:49