最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

精簡高效的C#網(wǎng)站優(yōu)化經(jīng)驗(yàn)技巧總結(jié)

 更新時(shí)間:2022年04月29日 10:49:18   作者:張飛洪  
這篇文章主要為大家介紹了精簡高效的C#網(wǎng)站優(yōu)化經(jīng)驗(yàn)技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

對大型網(wǎng)站,技術(shù)涉及面非常廣,對硬件,軟件,編程語言,Web Service,防火墻等等有很高要求。

面對大量用戶,高并發(fā)請求,可以使用高性能服務(wù)器,高性能編程語言,高性能數(shù)據(jù)庫,加大帶寬等,這意味著巨大的投入。

如果你沒有這樣的打算,而又想獲得更好的系統(tǒng)性能,則需要我們精打細(xì)算,從"軟"的方面著手。

如果你有過以下的一些用法,或者有不同見解,請賜教。

(1)Foreach比for有更好的執(zhí)行效率。

Foreach所花的時(shí)間大約只有for的30%,通過測試結(jié)果,在兩者都可以使用的情況下,我們推薦效率更高的Foreach。另外用for寫入數(shù)據(jù)的時(shí)間大約是讀取數(shù)據(jù)時(shí)間的10倍。

(2)避免使用ArrayList

因?yàn)槿魏螌ο蟠娣诺嚼锩?,都要轉(zhuǎn)化為System.Object類型,從ArrayList中取出數(shù)據(jù)要拆箱回原來的類型。建議使用.NET2.0的泛型,這是一個(gè)強(qiáng)類型,可以避免裝箱拆箱的性能消耗。

(3)不要使用UpperCase,LowerCase轉(zhuǎn)換字符串,再進(jìn)行比較。用String.Compare代替,他可以忽略大小寫進(jìn)行比較。

(4)用StringBuilder代替字符串連接符"+"

原因,見我的另一篇文章String 和BulidString性能比較和內(nèi)在機(jī)制

(5)避免在循環(huán)內(nèi)聲明變量,應(yīng)該在循環(huán)外聲明變量,在循環(huán)里初始化

//避免
 for(int i=0;i<10;i++)
{
AnyClass cl=new AnyClass();
//……
}
//推薦
for(int i=0;i<10;i++)
{
cl=new AnyClass();
//……

(6)捕獲異常,不用使用System.Exception

//避免
 try
 {
 //TODO
 }
 catch (Exception ex)
 {
 //TODO(雖然簡單,但性能較差)
 }
  //推薦
  try
  {
  //TODO
  }
  catch (System.NullReferenceException ex)
  {
  //對空對象異常處理
  }
  catch (System.ArgumentOutOfRangeException ex)
  {
  //超出范圍異常處理
  }
  catch (System.InvalidCastException ex)
  {
  //對異常轉(zhuǎn)化的處理
  }

(7)不要使用異常控制程序流程。

異常捕獲對性能的消耗很大,眾所周知的,能避免使用最好不用

     //避免
try
{
result=200/num;
}
catch (Exception ex)
{
result=0
 }
 //推薦
 try
 {
 result=num!=0?200/num:0;
 }
 catch (Exception ex)
 {
 result=0
 }

(8)在遇到調(diào)用實(shí)現(xiàn)IDisposable對象的時(shí)候,用Using和try/finally來釋放資源

//避免
 public void ExceuteCommand()
             {
                 SqlConnection sql=new SqlConnection(strCon);
                 SqlCommand cmd=new SqlCommand(sql);
                 sql.Dispose();//上面出錯,此處有可能永遠(yuǎn)都調(diào)用不到
                 cmd.Dispose();
             }
  //建議
 //Using內(nèi)并不是可以放任何對象,只有實(shí)現(xiàn)了IDisposable接口的對象才能被使用。
 //編譯器成IL時(shí)候,Using會自動把內(nèi)容放在try/finally里面。           
  try
             {       
                 using(SqlConnection sql=new SqlConnection(strCon))    
                 {
                      using(SqlCommand cmd=new SqlCommand(sql))
                     {
                     //TODO
                     }
                 }
             }
             catch (Exception ex)
             {
                 //
             }
             finally{
                 //或者
                 //sql.Dispose();
                 //cmd.Dispose();
             }
 //推薦
 因?yàn)槿绻龅蕉鄠€(gè)實(shí)現(xiàn)IDisposable接口的對象需要釋放,try/finally更好些
  //推薦
             SqlConnection sql=null;
             SqlCommand cmd=null;
             try
             {       
                 sql=new SqlConnection(strCon);
                 cmd=new SqlCommand(sql);
                 sql.Open();
                 cmd.ExecuteNonQuery();
             }
             finally{
                 if(sql!=null)
                   sql.Dispose();
                 if(cmd!=null)
                   cmd.Dispose();
             }

(9)避免使用反射,反射是比較浪費(fèi)性能的操作

通過反射來調(diào)用類型或方法,字段或?qū)傩允荂LR要做更多的工作,如校驗(yàn)參數(shù),檢查權(quán)限,所以速度是非常慢的。對于打算寫一個(gè)動態(tài)構(gòu)造類型(晚綁定)的應(yīng)用程序,可以通過繼承,接口,委托來實(shí)現(xiàn)。

(10)值類型組合成字符串,請使用.ToStrng()方法,避免裝箱操作。

//避免
var str="hello"+1+2;
//推薦
var str="hello"+1.ToString()+2.ToString();

(11)StopWatch類測試運(yùn)行時(shí)間

public delegate void AddHandler();
     class Program
     {
         static void Main(string[] args)
         {
             Utility.ProcessTimeSpan(Program.Add);
             Console.Read();
         }
         public static void Add()
         {
             var a = 0;
             for (int i = 0; i < 100000000; i++)
             {
                 a++;
             }
         }
     }
  public static class Utility
     {
         public static void ProcessTimeSpan(AddHandler addDelegate)
         {
   //推薦
             DateTime start = DateTime.Now;
             var timer = Stopwatch.StartNew();
             addDelegate();
             timer.Stop();
             Console.WriteLine("Method took {0} ms", timer.ElapsedMilliseconds);
  //傳統(tǒng)
 DateTime start = DateTime.Now;
 SomeCodeToTime();
 DateTime end = DateTime.Now;
 Console.WriteLine("Method took {0} ms", (end - start).TotalMilliseconds);
         }
     } 

以上就是精簡高效的C#網(wǎng)站優(yōu)化經(jīng)驗(yàn)技巧總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于C#網(wǎng)站優(yōu)化經(jīng)驗(yàn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中l(wèi)abel內(nèi)容顯示不全、不完整的解決方法

    C#中l(wèi)abel內(nèi)容顯示不全、不完整的解決方法

    這篇文章主要介紹了C#中l(wèi)abel內(nèi)容顯示不全、不完整的解決方法,只需要把兩個(gè)屬性設(shè)置一下即可解決這個(gè)問題,需要的朋友可以參考下
    2015-06-06
  • c#模擬js escape方法的簡單實(shí)例

    c#模擬js escape方法的簡單實(shí)例

    這篇文章主要介紹了c#模擬js escape方法的簡單實(shí)例,有需要的朋友可以參考一下
    2013-11-11
  • WinForm實(shí)現(xiàn)狀態(tài)欄跑馬燈效果的方法示例

    WinForm實(shí)現(xiàn)狀態(tài)欄跑馬燈效果的方法示例

    這篇文章主要介紹了WinForm實(shí)現(xiàn)狀態(tài)欄跑馬燈效果的方法,涉及WinForm控件結(jié)合時(shí)間函數(shù)動態(tài)操作元素屬性的相關(guān)技巧,需要的朋友可以參考下
    2017-07-07
  • 使用VS2010 C#開發(fā)ActiveX控件(上)

    使用VS2010 C#開發(fā)ActiveX控件(上)

    最近做讀卡器的B/S應(yīng)用程序開發(fā),由于讀卡器廠商提供的手冊都是C/S版本的,而且只有一個(gè)原始的Dll包,并沒有web版的,那么就只好自己動手,豐衣足食了
    2011-05-05
  • 基于mvc5+ef6+Bootstrap框架實(shí)現(xiàn)身份驗(yàn)證和權(quán)限管理

    基于mvc5+ef6+Bootstrap框架實(shí)現(xiàn)身份驗(yàn)證和權(quán)限管理

    最近剛做完一個(gè)項(xiàng)目,項(xiàng)目架構(gòu)師使用mvc5+ef6+Bootstrap,用的是vs2015,數(shù)據(jù)庫是sql server2014。下面小編把mvc5+ef6+Bootstrap項(xiàng)目心得之身份驗(yàn)證和權(quán)限管理模塊的實(shí)現(xiàn)思路分享給大家,需要的朋友可以參考下
    2016-06-06
  • C# 遞歸算法詳解

    C# 遞歸算法詳解

    什么是遞歸函數(shù)/方法?任何一個(gè)方法既可以調(diào)用其他方法也可以調(diào)用自己,而當(dāng)這個(gè)方法調(diào)用自己時(shí),我們就叫它遞歸函數(shù)或遞歸算法,接下來詳細(xì)介紹需要了解的朋友可以參考下
    2021-11-11
  • 關(guān)于C# Math 處理奇進(jìn)偶不進(jìn)的實(shí)現(xiàn)代碼

    關(guān)于C# Math 處理奇進(jìn)偶不進(jìn)的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)硪黄P(guān)于C# Math 處理奇進(jìn)偶不進(jìn)的實(shí)現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • c#之圓形無標(biāo)題欄橢圓窗體的實(shí)現(xiàn)詳解

    c#之圓形無標(biāo)題欄橢圓窗體的實(shí)現(xiàn)詳解

    本篇文章是對c#中圓形無標(biāo)題欄橢圓窗體的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C#獲取屬性的displayName的3種方式

    C#獲取屬性的displayName的3種方式

    在C#中,獲取屬性的displayName可以通過多種方式實(shí)現(xiàn),包括使用特性、反射和LINQ,下面我將分別展示每種方法,并提供具體的示例代碼,感興趣的朋友可以參考下
    2024-07-07
  • 在C#中使用MSMQ的方法

    在C#中使用MSMQ的方法

    這篇文章主要介紹了在C#中使用MSMQ的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01

最新評論

崇信县| 电白县| 达州市| 阜南县| 苍梧县| 碌曲县| 温州市| 浙江省| 靖宇县| 合山市| 巴塘县| 洪江市| 武冈市| 开阳县| 巢湖市| 子长县| 元谋县| 高州市| 新安县| 商城县| 砚山县| 新余市| 寿光市| 抚州市| 甘孜| 盐池县| 凤山县| 应用必备| 呼图壁县| 上栗县| 沧源| 安吉县| 武强县| 进贤县| 互助| 乌兰察布市| 来安县| 四平市| 兴义市| 赤峰市| 古丈县|