改進c#程式碼的5個常用的小技巧
改進c#程式碼的5個常用的小技巧
親愛的讀者,在這篇文章中,我提供了一些c#程式設計的最佳實踐。
你是否在使用者輸入驗證中使用異常處理機制?
如果是,那麼你就是那個把你的專案執行速度降低了62倍的人。你不相信我嗎?等幾分鐘;我來教你怎麼做。但是在這個例子之前,讓我們瞭解一下在什麼地方需要異常處理。
例如,你正在驗證使用者的資料,對於任何無效的輸入,你將引發一個異常並將其丟擲給客戶端,如下所示:
複製程式碼
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();
}
}
}
複製程式碼
這就是你等待的輸出。
我的概念證明非常簡單。在一個函式中,我丟擲了一個異常,在另一個函式中,我在檢查使用者輸入後返回一個布林值。我還附上了一個計算器的螢幕(哈哈…),讓你相信異常處理是如何影響程式碼效能的。
因此,我們可以得出這樣一個結論:“不要為使用者輸入驗證引發異常。”使用布林返回技術(或類似的技術)來驗證業務邏輯中的輸入”。因為異常物件的開銷非常大。
永遠不要在迴圈中實現try-Catch
是的,它也與異常處理有關。我重複“永遠不要在迴圈中執行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迴圈中實現了異常處理機制,而在method2中,我在沒有迴圈的情況下實現了異常處理機制。我們的輸出視窗表明,如果我們在for迴圈外實現try-catch程式的執行速度將比迴圈內的try-catch快2倍。
同樣,唯一的結論是“不要在專案的迴圈中實現try-catch。(是的!不僅在for迴圈中,而且在任何迴圈中。)
你是否瘋狂到要使用new操作符來建立一個整數變數?
親愛的讀者,不要因為我寫了這麼長的標題而批評我,也不要使用new操作符來建立一個簡單的整數變數。我知道你會說,如果你使用new操作符建立一個簡單的整數變數就會被自動設定為0,不遭受錯誤,如“未賦值的區域性變數”,但這真的是需要得到一個自動賦值為0,你的目的是建立一個區域性變數來儲存嗎?讓我們看看new操作符是如何降低程式碼執行的效能的。
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
http://www.
複製程式碼
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操作符將執行速度降低了5倍。我可以否認輸出螢幕,但有一件事!!你一次要建立1000個變數;在我們的專案中,我們不會一次建立1000個變數,最多建立2到3個。
好的。你的應用程式是web應用程式嗎?如果是,那麼請檢查任何流行的web應用程式的點選數,我確信它超過1000每天。
同樣,這一行的結論是“不要瘋狂地使用new操作符來建立整數變數”。
根據你的目的選擇最好的集合
我們.net開發人員非常熟悉c#中的集合以及它們用來儲存值的方法。讓我們看看它們是如何執行搜尋的。檢視搜尋整數的效能。這是我的程式碼。
複製程式碼
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 li = new List(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和整數陣列的情況下,效能非常相似。
方法是好的,但不是所有時候
如果你還記得你剛開始學習程式設計的那幾天,你學過一個概念,就是總是實現一個方法來在程式碼中實現好的練習,是的,實現一個方法來執行某些任務是很好的。方法在程式設計中有成千上萬的優點,但是讓我們看看方法是如何降低執行效能的。我再次強調,這一點並不是反對方法,而是簡單地展示方法呼叫是一種代價高昂的機制,並提供了在何處實現方法以及在何處不實現方法的想法。讓我們看看下面的程式碼。
複製程式碼
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();
}
}
}
點選並拖拽以移動
複製程式碼
下面是螢幕輸出:
在這裡,我想在輸出視窗中列印一條訊息,首先,我在一個靜態函式中實現了它,並通過類名呼叫它,第二次我只是在主函式中編寫它。可以,通過Console.Writeline()非常簡單。輸出螢幕顯示單行執行比函式快9倍。因此,唯一的結論是“在盲目執行某個功能之前,試著瞭解情況並做出最佳決策”
結論
謝謝你能容忍我這麼長時間。我在我的膝上型電腦上做了上面的測試,我的膝上型電腦有core i3處理器,4GB記憶體和Windows環境,在程式穩定後以釋放模式輸出。如果你使用不同的平臺和不同的輸出,在評論部分有足夠的空間寫評論。
相關文章
- 改進你的c#程式碼的5個技巧(三)C#
- 改進你的c#程式碼的5個技巧(四)C#
- 以事實駁斥:改進你的c#程式碼的5個技巧(四)C#
- 提高程式碼顏值的幾個小技巧
- 7 個改變我生活的 Git 小技巧Git
- 深入 TypeScript – 2( 幾個常用的小技巧)TypeScript
- Laravel 9 個不經常用的小技巧Laravel
- javascript的40個網頁常用小技巧JavaScript網頁
- 常用的CSS小技巧CSS
- 來安利一下,編寫現代JavaScript程式碼的5個小技巧!JavaScript
- JavaScript 中 JSON 的 5 個小技巧?JavaScriptJSON
- 程式碼重構:類重構的 8 個小技巧
- 30個Python常用小技巧Python
- 小麥苗的常用程式碼
- 5 個 Laravel Eloquent 小技巧Laravel
- MonoDevelop 3.0 大幅改進 C# 程式碼自動完成MonodevC#
- 如何改進你的指令碼程式指令碼
- 5個常用Java程式碼混淆器 助你保護你的程式碼Java
- 提高 Laravel Eloquent 查詢的5個小技巧Laravel
- 程式碼重構:函式重構的 7 個小技巧函式
- 良好的編碼習慣 —— 5 個提高程式碼質量的技巧
- 一個清理指令碼的改進思路指令碼
- 運用CSS改進網站設計的3個技巧CSS網站
- PHP程式碼優化的小技巧分享PHP優化
- 五個 goland 進行 go 開發的小技巧GoLand
- 提高Python執行效率的5個小技巧!Python
- 6個小技巧教你編寫乾淨整潔的程式碼
- 幾個小技巧讓你的Python程式碼更PythonicPython
- 敲程式碼時的一些常用技巧
- 改變遊戲規則的 API 設計審查的5個技巧遊戲API
- 最常用的 8 個排序演算法:從原理到改進,再到程式碼兌現透徹解析排序演算法
- C#程式設計師經常用到的10個實用程式碼片段C#程式設計師
- 常用的一些javascript小技巧JavaScript
- 50個常用的JQuery程式碼jQuery
- 45 個 PHP 程式效能優化的小技巧PHP優化
- [譯] 不用祖傳祕方 - 寫好程式碼的幾個小技巧
- 程式常用的設計技巧
- 一些 JavaScript 中的程式碼小技巧JavaScript