技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

【DiyVM】沙田机房/香港云/回国CN2线路/AMD EPYC/39元一月5M/CN2海外云主机 24元/月BGP+CN2海外云 低至25元/月海外主机 低至$2/月

DiyVM:香港VPS惊爆价36元一月
★站长变现★特色悬浮小图标广告
5M CN2 GIA云主机 24元起
【转化好产品,官方高价收量】
一一一云主机 26元起一一一
官方高价收量,每日稳定结算

一一云主机 24元 3折起一一
AWS核心代理U充值 免注册开户
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免费测试★APK免杀 谷歌过保护
官方收量CPA/CPS长期稳定

海外主机 5M CN2 低至$2/月
恒创科技 一 海外服务器 ● 高速稳定
★解决安装报毒★谷歌过保护机制
CN2 GIA/1000Mbps $111/月
超级签★免杀★加固★满意付款
全球云主机 3天试用再买

【菠萝云】香港4G内存99元,马上开通
亿人互联-津/京BGP托管租用/VPS
苹果签名/APP封装/远控免杀
10M CN2海外云VPS 53元/月
一一站长/主播好变现一一有流量就来
站长变现 特色悬浮小图标广告

实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现

赞助商

分类目录

赞助商

最新文章

Windows 2012 不默认安装 .NET 3.5,需要此环境的人要手动添加...
在本文中,我将介绍如何在 .NET 中美化 JSON 字符串。
asp.net 的 @OutputCache 是以声明方式控制 ASP.NET ...
在本教程中,您将了解 System.IO,它是一个 C# 命名空间。此命名空间提...
在本文中,我将介绍C#如何清理JSON字符串里的HTML标签,同时把双引号变为单...
== 运算符和 Equals() 方法都用于比较两个值类型数据项或引用类型数据项...
为了比较变量之间的相等性,C# 提供了两种比较方法“==&rdquo...

搜索

[C#技巧]new运算符使代码执行速度慢了5倍

作者:admin    时间:2023-5-5 10:53:52    浏览:317

C#中,new运算符创建一个类型的新实例。但是,请不要疯狂使用new运算符来创建一个简单的整型变量(int a = new int(); ),虽然,使用 new 运算符创建一个简单的整数变量,它会自动设置为 0,并且不会出现“未分配的局部变量”之类的错误,但是否真的有必要进行自动分配0?让我们看看 new 运算符如何降低代码执行的性能。

不要疯狂使用 new 运算符来创建整数变量

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Diagnostics;  
  6. using System.IO;  
  7. using System.Net;  
  8. using System.Net.NetworkInformation;  
  9. namespace Test1  
  10. {  
  11.     class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             Stopwatch sw = new Stopwatch();  
  16.             sw.Start();  
  17.             for (int i = 0; i < 1000; i++)  
  18.             {  
  19.                 int a = new int();  
  20.                 a = 100;  
  21.             }  
  22.             sw.Stop();  
  23.             Console.WriteLine("Using New operator:- " + sw.ElapsedTicks);  
  24.             sw.Restart();  
  25.             for (int i = 0; i < 1000; i++)  
  26.             {  
  27.                 int a;  
  28.                 a = 100;  
  29.             }  
  30.             sw.Stop();  
  31.             Console.WriteLine("Without new operator:- "+ sw.ElapsedTicks);  
  32.             Console.ReadLine();  
  33.         }  
  34.     }  
  35. }  

下面是执行结果

 new运算符将执行速度降低了 5 倍

可以看到,new运算符将执行速度降低了 5 倍,因此,不要疯狂使用 new 运算符来创建整数变量。

使用StringBuilder连接字符串

在 C#/.NET 中,字符串是不可变的。因此,每次你执行一些看起来像是在更改字符串的操作时,它们实际上是在创建一个新字符串。此类操作包括 ReplaceSubstring 等方法,但也包括连接。

小心连接大量字符串,尤其是在循环内。

这里的提示很简单——注意不要连接大量字符串,尤其是在循环内。在这种情况下,请使用 System.Text.StringBuilder 类,而不是使用“+”运算符。这将确保不会为你连接的每个部分创建新实例。

结论

  • 你不是在修改字符串,而是在创建它们,因此请避免对多个字符串执行批量操作
  • 改为使用 System.Text.StringBuilder。
x

内存位置很重要

我们看看下面的两段for循环代码,它们很相似,但是速度一样吗?哪个更快?

代码 1

  1. for (int i = 0; i < _map.Length; i++)
  2. {
  3.     for (int n = 0; n < _map.Length; n++)
  4.     {
  5.         if (_map[i][n] > 0)
  6.         {
  7.             result++;
  8.         }
  9.     }
  10. }

代码 2

  1. for (int i = 0; i < _map.Length; i++)
  2. {
  3.     for (int n = 0; n < _map.Length; n++)
  4.     {
  5.         if (_map[n][i] > 0)
  6.         {
  7.             result++;
  8.         }
  9.     }
  10. }

在测试中,这个循环上获得了大约 8 倍的性能提升!

注意到区别了吗?这是我们遍历这个数组的顺序([i][n] 与 [n][i])。内存局部性在 .NET 中确实很重要,尽管我们已经完全摆脱了自己管理内存的问题。

虽然 .NET 是面向对象的,但你仍然需要在内存分配中寻找性能提升机会。

总结

不要让 C# 错误拖慢你的代码速度,本文是对提高 .NET 代码的性能有用的一些技巧,花时间检查你的代码以确保它的性能并及时了解更新是值得的。

相关文章

x
广告: 【限时】云主机 24元/月