優化委託的 DynamicInvoke

2022-01-10 06:51:05 字數 1432 閱讀 9139

委託方法裡有乙個dynamicinvoke的方法,可以在不清楚委託實際型別的情況下執行委託方法,但是用dynamicinvoke去執行的話會比直接用invoke的方法會慢上很多,差了兩個數量級,所以在知道委託型別的情況下盡可能使用invoke執行,但有時候我們並不知道委託的實際型別,比如在很多類庫專案中可能並不是強型別的委託

優化方法,直接執行委託的對應的方法,dynamicinvoke實際也是呼叫的對應的方法,我們如果執行呼叫對應的方法就可以優化

delegate func = (func)str=> "12345";

string paramstring = "321";

// invoke

((func)func).invoke(paramstring);

// dynamicinvoke

func.dynamicinvoke(new object);

// method invoke

func.method.invoke(func.target, new object);

下面做乙個效能測試,測試**如下:

public class delegateinvoketest

[benchmark(baseline = true)]

public object invoke()

[benchmark]

public object invokeboxing()

[benchmark]

public object dynamicinvoke()

[benchmark]

public object dynamicinvokeboxing()

[benchmark]

public object methodinfoinvoke());}

[benchmark]

public object methodinfoinvokeboxing());}

[benchmark]

public object reflectinvoke());}

[benchmark]

public object reflectinvokeboxing());}

}

測試結果如下:

由上面的結果,我們可以看出來,直接呼叫方法的效能雖然還是比invoke慢上好多,但是相比dynamicinvoke已經優化 70% 左右,對於有裝箱操作的效能會稍差一些,比dynamicinvoke優化可達 44% 左右。

jquery優化 事件委託

隨著dom結構的複雜化和ajax等動態指令碼技術的運用,事件委託自然浮出了水面。jquery為繫結和委託事件提供了.bind live 和.delegate 方法。本文在討論這幾個方法內部實現的基礎上,展示它們的優劣勢及適用場合。事件委託的事例在現實當中比比皆是。比如,有三個同事預計會在周一收到快遞...

委託和委託的多播

using system namespace 委託 定義時委託型別的返回值和引數與要引用的方法的返回值和引數一致,二者在外形上一樣,只是委託用delegate修飾 委託的宣告 1.委託宣告 例如 public delegate int mydelegate string s 2.委託例項化 例如 m...

購物車功能事件委託優化

利用dom樹查詢元素做的簡易購物車功能簡易購物車 無法動態的新增購物車內商品的數量,事件委託 冒泡可以進一步優化 因為table中所有按鈕都需要能單擊,所以,應該將單擊事件統一繫結在父元素table上一次即可 var table document.getelementbyid data table....