[英]Any performance issue using static function Objects
我有一段這樣的代碼。 我寫這個是因為我喜歡擴展方法和lambda表達式:
public static class TuneingRules
{
public static Func<HtmlNode, bool> IsNodeHavingClearNone = (node) =>
{
if (node.HasAttributes)
{
// HtmlAttribute atr = item.Attributes.Where(at => at.Name == "id" && at.Value == "hello").FirstOrDefault();
HtmlAttribute atr = node.Attributes.Where(at => at.Name == "style").FirstOrDefault();
if (atr != null)
{
return Regex.Match(atr.Value, "clear\\s*:\\s*none;").Success;
}
}
return true;
};
}
和這樣的擴展方法。
public static class ExtensionMethods
{
#region Ignoring Rules
public static bool Ignore(this HtmlNode Node, Func<HtmlNode,bool> func) {
return func(Node);
}
#endregion
}
現在我有兩種方法來使用這段代碼。
1箱
if (!htmlNode.Ignore(TuneingRules.IsNodeHavingClearNone)){
//then do somethings
}
// here i am open to write lambda expression like this.
if (!htmlNode.Ignore( node => node.innerText =="" ){
//then do somethings
}
2箱
if (!TuneingRules.IsNodeHavingClearNone(htmlNode)) {
//then do something
}
如果TuneingRules
具有許多靜態Func<HtmlNode,bool>
對象Func<HtmlNode,bool>
恐怕會出現性能問題。 我需要重構代碼嗎? 在第一種情況下,有一個通過ignore function進行的額外調用……但是在第二種情況下,我可以直接調用該函數對象。 還是有另一種編寫此代碼的方法,以便堅持使用lambda和擴展方法?
不,沒有性能問題。
第一次使用TuneingRules
類會降低性能,因為將調用靜態構造函數並初始化所有靜態變量。 但是,與該功能的實際工作相比,這應該很小。
同樣,與該函數所做的工作相比,執行一個額外的方法調用可以忽略不計。 甚至可能通過JIT編譯器內聯擴展方法調用,以便執行的代碼實際上將執行與第二種情況相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.