有什麼不同,在性能方面,下面的C#代碼之間:string.length減> 0和string.length減= 0
string s = "abc";
bool notEmpty1 = s.Length != 0;
bool notEmpty2 = s.Length > 0
如果沒有,這是一個更好的編碼指南?在這個例子中,我還有興趣看看是否有其他語言的行爲不同於c#。
有什麼不同,在性能方面,下面的C#代碼之間:string.length減> 0和string.length減= 0
string s = "abc";
bool notEmpty1 = s.Length != 0;
bool notEmpty2 = s.Length > 0
如果沒有,這是一個更好的編碼指南?在這個例子中,我還有興趣看看是否有其他語言的行爲不同於c#。
所以,我決定測試一下,結果有些不確定,但很明顯,任何性能差異都很小。
這裏是我寫來測試它的代碼:
var times = 100000;
string s = "abc";
Stopwatch sw = new Stopwatch();
sw.Start();
for (var i = 0; i < times; i++)
{
bool notEmpty1 = s.Length != 0;
}
var diff = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty2 = s.Length > 0;
}
var gt = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty3 = !string.IsNullOrEmpty(s);
}
var noe = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty4 = s.Any();
}
var any = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty4 = s != string.Empty;
}
var dif2 = sw.Elapsed;
Console.WriteLine(string.Format("!= {0}\n> {1}\nIsNullOrEmpty {2}\nAny {3}\n!= empty {4}", diff.TotalMilliseconds, gt.TotalMilliseconds, noe.TotalMilliseconds, any.TotalMilliseconds, dif2.TotalMilliseconds));
這裏有一些測試結果:
!= 0.4986
> 0.451
IsNullOrEmpty 0.3965
Any 6.8151
!= empty 0.5844
!= 0.7649
> 0.7822
IsNullOrEmpty 0.5672
Any 3.4259
!= empty 0.5104
!= 0.7984
> 0.5202
IsNullOrEmpty 0.3484
Any 3.3951
!= empty 0.4786
!= 0.9502
> 0.6104
IsNullOrEmpty 0.4877
Any 4.1838
!= empty 0.6849
可以在this fiddle.
在小提琴手中運行microbenchmark,你認真嗎?以下是1M週期的一些實際結果:!= 0.2939; > 0,2936; IsNullOrEmpty 0,587;任何18,0589; !=空2,3353 –
其實,我寫了一個新的控制檯應用程序並進行了測試。我只做了小提琴讓OP有機會將它複製到他自己的環境中,並直接運行而不需要添加任何東西。 –
但在我看來,您提供了來自小提琴手的結果,而不是從控制檯應用程序。 –
改爲使用string.IsNullOrEmpty(s)
或string.IsNullOrWhiteSpace(s)
。
更好的選擇,更優雅是
bool notEmpty2 = s.Length > 0
這是因爲它是不可能有比0長度小於字符串
這裏的邏輯避開了我。 –
如果不可能小於0,是不是更喜歡'!= 0'?否則,支票在邏輯上會更昂貴。 – Rob
您可以使用此一:
string.IsNullOrEmpty(string)
或
string.IsNullOrWhiteSpace(string)
,但你可以這樣做:
s.Length > 0
'字符串自己運行它。 IsNullOrEmpty(s)' – Rob
@Rob我考慮過這個,但是如果我知道's'永遠不會爲空,我真的需要這個嗎? –
你也可以這樣檢查:'bool notEmpty =!s.Equals(String.Empty)' – g4s8