首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

如何判斷字串是否為空字串(二):深入效能分析

     編輯:關於C語言

進一步分析三種常見判空方式的內部機制:

Empty 法

String.Empty 是靜態唯讀欄位,僅在靜態建構函式中建立一次。但呼叫 str == String.Empty 時,.NET 內部會依序展開呼叫:

public static bool Operator ==(string a, string b);
public static bool Equals(string a, string b);
private static unsafe bool EqualsHelper(string ao, string bo);

後兩個方法內部仍進行物件參考相等比較。

General 法

使用 str == "" 時,除了上述三個方法呼叫外,還必須先建立一個臨時空字串實例。大量比較時效能極差。

Length 法

直接比較 str.Length == 0,繞過複雜呼叫鏈,僅進行整數比較。在 32 位元系統上,Int32 運算最快。.NET 內部 EqualsHelper 亦先以長度比較快速判斷。

Mono 原始碼顯示 String.Length 直接回傳內部 length 欄位:

class String {
 private int length;
 public int Length { get { return length; } }
}

注意事項

使用 Length 法前必須先檢查 null 參考,否則會拋出 NullReferenceException。改良寫法:

void Foo(string bar) {
 if ((bar != null) && (bar.Length == 0)) { /* ... */ }
}

結論

Length 法在大量字串判空時具有顯著效能優勢,前提是先排除 null 參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved