技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

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

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

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

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

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 倍

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

使用StringBuilder连接字符串

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

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

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

结论

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

内存位置很重要

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

代码 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++;
        }
    }
}

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

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

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

总结

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

相关文章

x
  • 站长推荐
/* 左侧显示文章内容目录 */