zoukankan      html  css  js  c++  java
  • 闲得发慌篇_字符串直接赋值与替换性能对比

    今天在学习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、字符串具有驻留性,在对变量赋相同值时,不会频繁开辟空间,而是直接将已有字符串的地址赋值给该变量。 

  • 相关阅读:
    树莓派3下开启SSH服务
    没有显示器连接树莓派
    没有屏幕和键盘如何玩转树莓派
    无显示器通过网线连接笔记本电脑玩转树莓派
    解决某些软件无法在虚拟机中运行的方法
    sql注入-基于布尔型的盲注入门
    前台数据传到后台,日期类型序列化后与前台传过来的数据不一致
    layui修改表格行高
    jQuery动态回到顶部
    禁止选中页面内容
  • 原文地址:https://www.cnblogs.com/az4215/p/13026450.html
Copyright © 2011-2022 走看看