程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .net 性能優化4

.net 性能優化4

編輯:.NET實例教程

C#寫的代碼,有個地方稍不留神,就產生了對性能的嚴重影響 ,那就是隱式轉換。看一下代碼:



int a = 0;
uint b = 0;
if (a > b)
{
}

這代碼一眼看上去,什麼問題都沒有,更可惡的是,連編譯警告都沒有,我絕對認為這是不應該的。因為int跟uint的取值范圍不同,為了確保比較出來的結果正確,編譯器自動把a轉換成long,把b轉換成ulong,進行比較,比較的答案很正確,卻嚴重影響了性能。

如果在代碼中,能確定a、b都不會超出int的的最大值,絕對可以uint轉換成int來進行比較,性能能大大提高。看一下兩段測試代碼:

沒有手動進行轉換:



int start = Environment.TickCount;
int a = 0;
uint b = 0;
while (a < 1000000000)
{
    if (a <= b) a++;
    if

$False$

OR: #000000"> (a > b) b++;

    if (a <= b) a++;
    if (a > b) b++;

    if (a <= b) a++;
    if (a > b) b++;

    if (a <= b) a++;
    if (a > b) b++;
}
Console.WriteLine(Environment.TickCount - start);

我電腦的測試時間大概是3.3秒

 



int start = Environment.TickCount;r />int a = 0;
uint b = 0;
while (a < 1000000000)
{
    if (a <= (int)b) a++;
    if (a > (int)b) b++;

    if (a <= (int)b) a++;
    if (a > (int)b) b++;

    if> (a <= (int)b) a++;
    if (a > (int)b) b++;

    if (a <= (int)b) a++;
    if (a > (int)b) b++;
}
Console.WriteLine(Environment.TickCount - start);

我電腦的測試時間大概是1.3秒

這點不起眼的改動,程序快了2.5倍。(循環體中之所以加上多句判斷,是因為想減少循環計數對測試時間的影響。)

技術討論的QQ群: 2514097 或 10987609 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved