今天在學習winform項目時,看到同時是這樣解決text文本框變換值的: winform界面是這樣的 於是我在想,為什麼不直接進行賦值來進行變換,而通過替換局部字元串來變換呢?兩者之間有什麼區別?到底哪一種的性能會好點?於是帶著種種疑問,設計瞭如下實驗: using System; using S ...
今天在學習winform項目時,看到同時是這樣解決text文本框變換值的:
winform界面是這樣的
於是我在想,為什麼不直接進行賦值來進行變換,而通過替換局部字元串來變換呢?兩者之間有什麼區別?到底哪一種的性能會好點?於是帶著種種疑問,設計瞭如下實驗:
using System; using System.Diagnostics; namespace test { class Program { static void Main(string[] args) { var str1 = "轉到編輯界面"; var num = 0; while (num < 5) { test1(str1); test2(str1); num += 1;
System.Console.WriteLine("====================="); } } private static void test1(string str1) { var num = 0; var str = str1; var sw = new Stopwatch(); sw.Start(); while (num < 100000) { if (str == str1) str = str.Replace("編輯", "預覽"); else str = str.Replace("預覽", "編輯"); num += 1; } sw.Stop(); System.Console.WriteLine(sw.ElapsedMilliseconds); } private static void test2(string str1) { var num = 0; var str = ""; var sw = new Stopwatch(); sw.Start(); while (num < 100000) { str = str == str1 ? "轉到預覽界面" : "轉到編輯界面"; num += 1; } sw.Stop(); System.Console.WriteLine(sw.ElapsedMilliseconds); } } }
運行結果如下:
通過結果我們知道,兩者直接是存在性能差異的,而且直接賦值比局部替換效率高,大概5倍左右。
原因分析:
1、Replace需要進行檢索、替換,再修改指針地址,而直接賦值的則不需要考慮檢索。
2、字元串具有駐留性,在對變數賦相同值時,不會頻繁開闢空間,而是直接將已有字元串的地址賦值給該變數。