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

改進c# 代碼的五個技巧(一)

 更新時間:2021年01月04日 14:31:08   作者:碼農(nóng)譯站  
這篇文章主要介紹了改進c# 代碼的五個技巧(一),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

親愛的讀者,在這篇文章中,我提供了一些c#編程的最佳實踐。

你是否在用戶輸入驗證中使用異常處理機制?

如果是,那么你就是那個把你的項目執(zhí)行速度降低了62倍的人。你不相信我嗎?等幾分鐘;我來教你怎么做。但是在這個例子之前,讓我們了解一下在什么地方需要異常處理。

例如,你正在驗證用戶的數(shù)據(jù),對于任何無效的輸入,你將引發(fā)一個異常并將其拋出給客戶端,如下所示:

class BusinessLogcCheck 
{ 
  public void Check() 
  { 
    try 
    { 
      //Your validation code is here 
    } 
    catch (Exception ex) 
    { 
      throw new Exception("My own exception"); 
    } 
  } 
}

親愛的朋友,在下一個示例中,如果你看到輸出屏幕,你將意識到這種做法有多糟糕。讓我們看看下面的代碼。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    public static void ThrowTest() 
    { 
      throw new Exception("This is exceptopn"); 
    } 
    public static Boolean Return() 
    { 
      return false; 
    } 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      try 
      { 
          ThrowTest(); 
      } 
      catch 
      { 
      } 
      sw.Stop(); 
      Console.WriteLine("With Exception " + sw.ElapsedTicks); 
      sw.Restart(); 
      try 
      { 
        Return(); 
      } 
      catch 
      { 
      } 
      sw.Stop(); 
      Console.WriteLine("With Return " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}

這就是你等待的輸出。

我的概念證明非常簡單。在一個函數(shù)中,我拋出了一個異常,在另一個函數(shù)中,我在檢查用戶輸入后返回一個布爾值。我還附上了一個計算器的屏幕(哈哈..),讓你相信異常處理是如何影響代碼性能的。

因此,我們可以得出這樣一個結(jié)論:“不要為用戶輸入驗證引發(fā)異常?!笔褂貌紶柗祷丶夹g(shù)(或類似的技術(shù))來驗證業(yè)務(wù)邏輯中的輸入”。因為異常對象的開銷非常大。

永遠不要在循環(huán)中實現(xiàn)try-Catch

是的,它也與異常處理有關(guān)。我重復“永遠不要在循環(huán)中執(zhí)行try-catch”。讓我用一個例子來證明。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Method1() 
    { 
      for (int i = 0; i < 1000; i++) 
      { 
        try 
        { 
          int value = i * 100; 
          if (value == -1) 
          { 
            throw new Exception(); 
          } 
        } 
        catch 
        { 
        } 
      } 
    } 
    static void Method2() 
    { 
      try 
      { 
        for (int i = 0; i < 1000; i++) 
        { 
          int value = i * 100; 
          if (value == -1) 
          { 
            throw new Exception(); 
          } 
        } 
      } 
      catch 
      { 
      } 
    } 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      Method1(); 
      sw.Stop(); 
      Console.WriteLine("Within Loop " + sw.ElapsedTicks); 
      sw.Restart(); 
      Method2(); 
      sw.Stop(); 
      Console.WriteLine("Outside of Loop " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}

這是輸出屏幕。

在method1的這個程序中,我在for循環(huán)中實現(xiàn)了異常處理機制,而在method2中,我在沒有循環(huán)的情況下實現(xiàn)了異常處理機制。我們的輸出窗口表明,如果我們在for循環(huán)外實現(xiàn)try-catch程序的執(zhí)行速度將比循環(huán)內(nèi)的try-catch快2倍。

同樣,唯一的結(jié)論是“不要在項目的循環(huán)中實現(xiàn)try-catch。(是的!不僅在for循環(huán)中,而且在任何循環(huán)中。)

你是否瘋狂到要使用new操作符來創(chuàng)建一個整數(shù)變量?

親愛的讀者,不要因為我寫了這么長的標題而批評我,也不要使用new操作符來創(chuàng)建一個簡單的整數(shù)變量。我知道你會說,如果你使用new操作符創(chuàng)建一個簡單的整數(shù)變量就會被自動設(shè)置為0,不遭受錯誤,如“未賦值的局部變量”,但這真的是需要得到一個自動賦值為0,你的目的是創(chuàng)建一個局部變量來存儲嗎?讓我們看看new操作符是如何降低代碼執(zhí)行的性能的。 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      for (int i = 0; i < 1000; i++) 
      { 
        int a = new int(); 
        a = 100; 
      } 
      sw.Stop(); 
      Console.WriteLine("Using New operator:- " + sw.ElapsedTicks); 
      sw.Restart(); 
      for (int i = 0; i < 1000; i++) 
      { 
        int a; 
        a = 100; 
      } 
      sw.Stop(); 
      Console.WriteLine("Without new operator:- "+ sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}

輸出的截圖如下:

new操作符將執(zhí)行速度降低了5倍。我可以否認輸出屏幕,但有一件事!!你一次要創(chuàng)建1000個變量;在我們的項目中,我們不會一次創(chuàng)建1000個變量,最多創(chuàng)建2到3個。

好的。你的應(yīng)用程序是web應(yīng)用程序嗎?如果是,那么請檢查任何流行的web應(yīng)用程序的點擊數(shù),我確信它超過1000每天。

同樣,這一行的結(jié)論是“不要瘋狂地使用new操作符來創(chuàng)建整數(shù)變量”。

根據(jù)你的目的選擇最好的集合

我們.net開發(fā)人員非常熟悉c#中的集合以及它們用來存儲值的方法。讓我們看看它們是如何執(zhí)行搜索的。查看搜索整數(shù)的性能。這是我的代碼。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      List<Int32> li = new List<Int32>(1000); 
      Dictionary<int, int> di = new Dictionary<int, int>(1000); 
      int[] arr = new int[1000]; 
      int a; 
      for (int i = 0; i < 1000; i++) 
      { 
        li.Add(i); 
        di.Add(i, i); 
        arr[i] = i; 
      } 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      a = li[500]; 
      sw.Stop(); 
      Console.WriteLine("From list:- " + sw.ElapsedTicks); 
      sw.Start(); 
      a = arr[500]; 
      sw.Stop(); 
      Console.WriteLine("From Integer array:- " + sw.ElapsedTicks); 
      sw.Restart(); 
      a = di[500]; 
      sw.Stop(); 
      Console.WriteLine("From Dictionary:- " + sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}

輸出在這里:

我們可以清楚地看到,在字典的情況下,搜索的性能是最差的,而在list和整數(shù)數(shù)組的情況下,性能非常相似。

方法是好的,但不是所有時候

如果你還記得你剛開始學習編程的那幾天,你學過一個概念,就是總是實現(xiàn)一個方法來在代碼中實現(xiàn)好的練習,是的,實現(xiàn)一個方法來執(zhí)行某些任務(wù)是很好的。方法在編程中有成千上萬的優(yōu)點,但是讓我們看看方法是如何降低執(zhí)行性能的。我再次強調(diào),這一點并不是反對方法,而是簡單地展示方法調(diào)用是一種代價高昂的機制,并提供了在何處實現(xiàn)方法以及在何處不實現(xiàn)方法的想法。讓我們看看下面的代碼。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.NetworkInformation; 
namespace Test1 
{ 
  class test 
  { 
    public static void Print() 
    { 
      Console.WriteLine("I am function from Class"); 
    } 
  } 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      Stopwatch sw = new Stopwatch(); 
      sw.Start(); 
      test.Print(); 
      sw.Stop(); 
      Console.WriteLine(sw.ElapsedTicks); 
      sw.Restart(); 
      Console.WriteLine("I am single statement within main"); 
      sw.Stop(); 
      Console.WriteLine(sw.ElapsedTicks); 
      Console.ReadLine(); 
    } 
  } 
}

下面是屏幕輸出:

在這里,我想在輸出窗口中打印一條消息,首先,我在一個靜態(tài)函數(shù)中實現(xiàn)了它,并通過類名調(diào)用它,第二次我只是在主函數(shù)中編寫它??梢?,通過Console.Writeline()非常簡單。輸出屏幕顯示單行執(zhí)行比函數(shù)快9倍。因此,唯一的結(jié)論是“在盲目執(zhí)行某個功能之前,試著了解情況并做出最佳決策”

結(jié)論

謝謝你能容忍我這么長時間。我在我的筆記本電腦上做了上面的測試,我的筆記本電腦有core i3處理器,4GB內(nèi)存和Windows環(huán)境,在程序穩(wěn)定后以釋放模式輸出。如果你使用不同的平臺和不同的輸出,在評論部分有足夠的空間寫評論。

以上就是改進c# 代碼的五個技巧(一)的詳細內(nèi)容,更多關(guān)于改進c# 代碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# windows語音識別與朗讀實例

    C# windows語音識別與朗讀實例

    這篇文章主要為大家詳細介紹了C# windows語音識別與朗讀實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#中winform使用相對路徑讀取文件的方法

    C#中winform使用相對路徑讀取文件的方法

    這篇文章主要介紹了C#中winform使用相對路徑讀取文件的方法,實例分析了C#使用相對路徑讀取文件的技巧與實際應(yīng)用,需要的朋友可以參考下
    2015-01-01
  • 聊聊Unity自定義組件之序列幀播放組件問題

    聊聊Unity自定義組件之序列幀播放組件問題

    由于最近的項目中需要用到大量的序列幀動畫以及邏輯處理,本來想用Unity自帶的Animation組件來實現(xiàn)的,但由于甲方需求一再變更,需要處理的邏輯太多,為了方便修改和拓展,所以就根據(jù)自己項目的需求自定義了一個序列幀播放組件來輔助開發(fā)
    2022-01-01
  • linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟

    linux操作系統(tǒng)安裝MONO執(zhí)行C#程序的詳解步驟

    這篇文章主要介紹了linux操作系統(tǒng)安裝MONO執(zhí)行C#程序詳解步驟,有需要的可以參考一下
    2013-12-12
  • C#DirectoryInfo類用法詳解

    C#DirectoryInfo類用法詳解

    這篇文章主要介紹了C#DirectoryInfo類用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于C#實現(xiàn)圖像縮放與裁剪工具

    基于C#實現(xiàn)圖像縮放與裁剪工具

    圖像縮放與裁剪在多個領(lǐng)域和應(yīng)用場景中都非常常見,本文將介紹如何使用C#的GDI+(Graphics Device Interface)庫來實現(xiàn)一個圖像縮放與裁剪工具,有需要的可以參考下
    2025-03-03
  • C#類中的屬性使用總結(jié)(詳解類的屬性)

    C#類中的屬性使用總結(jié)(詳解類的屬性)

    屬性是一種類的成員,它的實現(xiàn)類似函數(shù),訪問類似字段。它的作用是提供一種靈活和安全的機制來訪問,修改私有字段。所以屬性必須依賴于字段
    2014-03-03
  • Unity實現(xiàn)俄羅斯方塊(一)

    Unity實現(xiàn)俄羅斯方塊(一)

    這篇文章主要介紹了Unity實現(xiàn)俄羅斯方塊的第一部分代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#執(zhí)行js動態(tài)編譯的方法

    C#執(zhí)行js動態(tài)編譯的方法

    這篇文章主要介紹了C#執(zhí)行js動態(tài)編譯的方法,是涉及動態(tài)編譯腳本非常實用的技巧,需要的朋友可以參考下
    2015-01-01
  • C#連接數(shù)據(jù)庫的方法

    C#連接數(shù)據(jù)庫的方法

    ASP.NET連接數(shù)據(jù)庫的技術(shù)叫ADO.NET,它是用來向數(shù)據(jù)庫提交sql語句的一堆類。這里連接的是Sql Server 2008數(shù)據(jù)庫,其他數(shù)據(jù)庫用法差不多,就是調(diào)用的類名不一樣
    2015-11-11

最新評論

井研县| 曲周县| 黄大仙区| 芦溪县| 西乌珠穆沁旗| 改则县| 柳江县| 仁化县| 德州市| 富平县| 怀安县| 阜阳市| 安龙县| 昌江| 滕州市| 达尔| 青田县| 宣城市| 九江县| 大庆市| 舒兰市| 扬中市| 霍州市| 南开区| 永靖县| 徐州市| 青浦区| 大埔区| 邵阳县| 砚山县| 梓潼县| 长子县| 石屏县| 江口县| 洪江市| 呼伦贝尔市| 临海市| 紫云| 平阴县| 杭锦旗| 隆子县|