|
|
|
|
|
C#中,new
運(yùn)算符創(chuàng)建一個(gè)類(lèi)型的新實(shí)例。但是,請(qǐng)不要瘋狂使用new
運(yùn)算符來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的整型變量(int a = new int();
),雖然,使用 new
運(yùn)算符創(chuàng)建一個(gè)簡(jiǎn)單的整數(shù)變量,它會(huì)自動(dòng)設(shè)置為 0,并且不會(huì)出現(xiàn)“未分配的局部變量”之類(lèi)的錯(cuò)誤,但是否真的有必要進(jìn)行自動(dòng)分配0?讓我們看看 new
運(yùn)算符如何降低代碼執(zhí)行的性能。
不要瘋狂使用 new 運(yùn)算符來(lái)創(chuàng)建整數(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)
{
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();
}
}
}
下面是執(zhí)行結(jié)果
可以看到,new
運(yùn)算符將執(zhí)行速度降低了 5 倍,因此,不要瘋狂使用 new
運(yùn)算符來(lái)創(chuàng)建整數(shù)變量。
使用StringBuilder連接字符串
在 C#/.NET 中,字符串是不可變的。因此,每次你執(zhí)行一些看起來(lái)像是在更改字符串的操作時(shí),它們實(shí)際上是在創(chuàng)建一個(gè)新字符串。此類(lèi)操作包括 Replace
和 Substring
等方法,但也包括連接。
小心連接大量字符串,尤其是在循環(huán)內(nèi)。
這里的提示很簡(jiǎn)單——注意不要連接大量字符串,尤其是在循環(huán)內(nèi)。在這種情況下,請(qǐng)使用 System.Text.StringBuilder
類(lèi),而不是使用“+”運(yùn)算符。這將確保不會(huì)為你連接的每個(gè)部分創(chuàng)建新實(shí)例。
結(jié)論
內(nèi)存位置很重要
我們看看下面的兩段for
循環(huán)代碼,它們很相似,但是速度一樣嗎?哪個(gè)更快?
代碼 1
for (int i = 0; i < _map.Length; i++)
{
for (int n = 0; n < _map.Length; n++)
{
if (_map[i][n] > 0)
{
result++;
}
}
}
代碼 2
for (int i = 0; i < _map.Length; i++)
{
for (int n = 0; n < _map.Length; n++)
{
if (_map[n][i] > 0)
{
result++;
}
}
}
在測(cè)試中,這個(gè)循環(huán)上獲得了大約 8 倍的性能提升!
注意到區(qū)別了嗎?這是我們遍歷這個(gè)數(shù)組的順序([i][n] 與 [n][i])。內(nèi)存局部性在 .NET 中確實(shí)很重要,盡管我們已經(jīng)完全擺脫了自己管理內(nèi)存的問(wèn)題。
雖然 .NET 是面向?qū)ο蟮?,但你仍然需要在?nèi)存分配中尋找性能提升機(jī)會(huì)。
總結(jié)
不要讓 C# 錯(cuò)誤拖慢你的代碼速度,本文是對(duì)提高 .NET 代碼的性能有用的一些技巧,花時(shí)間檢查你的代碼以確保它的性能并及時(shí)了解更新是值得的。
相關(guān)文章