VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • C#教程之闲得发慌篇_字符串直接赋值与替换性能对比

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

今天在学习winform项目时,看到同时是这样解决text文本框变换值的:

winform界面是这样的

于是我在想,为什么不直接进行赋值来进行变换,而通过替换局部字符串来变换呢?两者之间有什么区别?到底哪一种的性能会好点?于是带着种种疑问,设计了如下实验:

复制代码
using System;
using System.Diagnostics;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            var str1 = "转到编辑界面";
            var num = 0;
            while (num < 5)
            {
                test1(str1);
                test2(str1);
                num += 1;  
          System.Console.WriteLine("=====================");
            }
        }

        private static void test1(string str1)
        {
            var num = 0; var str = str1;
            var sw = new Stopwatch();
            sw.Start();
            while (num < 100000)
            {
                if (str == str1)
                    str = str.Replace("编辑", "预览");
                else
                    str = str.Replace("预览", "编辑");
                num += 1;
            }
            sw.Stop();
            System.Console.WriteLine(sw.ElapsedMilliseconds);
        }

        private static void test2(string str1)
        {
            var num = 0; var str = "";
            var sw = new Stopwatch();
            sw.Start();
            while (num < 100000)
            {
                str = str == str1 ? "转到预览界面" : "转到编辑界面";
                num += 1;
            }
            sw.Stop();
            System.Console.WriteLine(sw.ElapsedMilliseconds);
        }
    }
}
复制代码

运行结果如下:

通过结果我们知道,两者直接是存在性能差异的,而且直接赋值比局部替换效率高,大概5倍左右。

原因分析:

  1、Replace需要进行检索、替换,再修改指针地址,而直接赋值的则不需要考虑检索。

  2、字符串具有驻留性,在对变量赋相同值时,不会频繁开辟空间,而是直接将已有字符串的地址赋值给该变量。

相关教程