我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#字符串的性能是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#字符串的性能是什么

本篇内容介绍了“C#字符串的性能是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

简介

你在代码中处理C#字符串的方法可能会对性能产生令人吃惊的影响。程序中需要考虑两个由于使用字符串而产生的问题:临时字符串变量的使用和字符串连接。

背景知识

String是引用类型,在堆上分配内存。

String运算时会产生一个新的实例。当看到 myString.ToUpper() 时,我经常都会忘记它并不是改变 myString 的内容而是返回一整个全新的字符串(这是由于C# 字符串是不可变的)。

String 对象一旦生成不可改变(Immutable)。

定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)的值。

String Comparison and Temporary String Creation

下面的例程是一个蹩脚的非大小写敏感的字符串比较。用于比较的例程的代码是:

static bool BadCompare(string stringA, string stringB)  {      return (stringA.ToUpper() == stringB.ToUpper());  }

对于这段代码,FxCop 给出如下的建议:

C#字符串的性能是什么

这项建议的意思是每次对 ToUpper() 的调用都会创造一个临时字符串,而这个临时字符串是由垃圾收集器来创建和管理的。这需要额外的时间和使用更多的内存。 String.Compare 方法(相对来说)更加高效。

String Concatenation inside a loop

***那对测试例程设想字符串的连接是在一个循环里面进行的。

“蹩脚”的测试例程的代码如下:

static string BadConcatenate(string [] items)  {      string strRet = string .Empty;       foreach (string item in items)      {          strRet += item;      }       return strRet;  }

当 FxCop 看到这段代码,它就会很愤怒,甚至用红色标记这项被破的规条! FxCop 这样说道:

C#字符串的性能是什么 

“优良”的测试例程的代码如下:

static string GoodConcatenate(string [] items)  {      System.Text.StringBuilder builder = new System.Text.StringBuilder();       foreach (string item in items)      {          builder.Append(item);      }       return builder.ToString();  }

这段代码几乎被用作展示 System.Text.StringBuilder 的用法的***例子。蹩脚的代码的问题是创建了过多的临时字符串。由于字符串的不可变特性,连接操作符(+=)实际上用原来那两个字符串来创建一个新的字符串,然后把原来的字符串实例指向这个新的字符串。

但是,依据 nprof 来研究代码性能,我们发现运行 BadConcatenate 只需总执行时间的 5.67% ,而 GoodConcatenate 则是 22.09% 。也就是说:

使用 StringBuilder 耗费的时间几乎是简单的字符串连接的四倍!

为什么呢?

部分原因在于这个测试的设计——连接例程仅仅连接了十个简短的字符串。 StringBuilder 是一个比简单的不可变的字符串类更复杂的类,因此创建一个 StringBuilder 比起进行十个简单的字符串连接在性能上是昂贵很多的。

我重复地做不同数目的字符串连接的测试,并且发现以下结果:

C#字符串的性能是什么

结论

使用 String.Compare 方法进行非大小写敏感的C#字符串比较。这样更快。而且代码优雅和简单。

仅当你在一个循环里进行超过 600 次的字符串连接时,使用 StringBuilder 来获得更好的速度。这里需要提醒的是,你所处理的字符串的长度也会影响最终的速度,同样会影响垃圾收集器的效果,所以你应该根据你实际的代码具体问题具体分析

使用 StringBuilder 来处理字符串的连接应该是绝大多数 .NET 开发人员的共识了。但你有否曾经怀疑过这一经验原则的适用性是否真如想象中那么广泛呢?读过本文后,或许你已经意识到这是个适度的问题。对小规模的字符串连接使用 StringBuilder 所带来的改善根本不足以抵偿因 StringBuilder 本身的复杂性所产生的开销;只有当连接规模达到临界规模,两者才能相互抵偿从而达至平衡。

“C#字符串的性能是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#字符串的性能是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#字符串的性能是什么

本篇内容介绍了“C#字符串的性能是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介你在代码中处理C#字符串的方法可能会对性能产生令人吃
2023-06-17

怎么改进C#连接字符串的性能

本篇内容主要讲解“怎么改进C#连接字符串的性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么改进C#连接字符串的性能”吧!.NET 框架中的C#连接字符串描述 比 Visual C/C++
2023-06-17

c++中字符串常量是什么

c++++ 中的字符串常量什么是字符串常量?字符串常量是在 C++ 代码中表示固定文本值的不变字符序列。创建字符串常量在 C++ 中,可以使用以下两种方法来创建字符串常量:双引号:"创建包含双引号的文本,该文本保持不变。例如:"
c++中字符串常量是什么
2024-05-12

C#字符串拼接的方法是什么

C#字符串拼接的方法有多种,其中最常用的方法包括使用加号(+)运算符、String.Concat()方法、String.Format()方法和StringBuilder类。使用加号(+)运算符:可以使用加号(+)运算符将两个字符串连接起来,
C#字符串拼接的方法是什么
2024-03-04

c++输出字符串的方法是什么

在C++中,输出字符串可以使用std::cout或者std::printf函数来实现。使用std::cout输出字符串的方法如下:#include int main() {std::string str = "Hel
c++输出字符串的方法是什么
2024-03-02

c++字符串加密的方法是什么

在C++中,字符串加密的方法可以使用各种加密算法,如AES、DES、RSA等。这些算法可以用来加密字符串,以确保数据的安全性和隐私性。以下是一个简单的示例,展示如何使用AES算法对字符串进行加密:#include #
c++字符串加密的方法是什么
2024-04-08

Python字符串中的mapping的功能是什么

这篇文章主要介绍“Python字符串中的mapping的功能是什么”,在日常操作中,相信很多人在Python字符串中的mapping的功能是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字符串
2023-06-17

c++中输出字符串函数是什么

字符串输出函数是 cout,用于在标准输出流上输出数据。使用 cout 输出字符串的语法:cout C++ 中的字符串输出函数在 C++ 编程中,输出字符串的函数是 cout。cout 是 C++ 标准库中 iostream 头文件的一部
c++中输出字符串函数是什么
2024-05-06

C语言常量和字符串是什么

C语言常量是指在程序运行期间不会改变其值的数据,包括整型常量、浮点型常量、字符常量和枚举常量等。字符串是由一系列字符组成的字符数组,以空字符'\0'作为结束标志。在C语言中,字符串常常用双引号括起来表示,如"Hello, World!"。字
2023-08-18

Java中的字符串是什么

这篇文章给大家分享的是有关Java中的字符串是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java中的字符串String : 内容不可更换的StringBuffer : 线程安全的StringBuilde
2023-06-03

C语言字符串的排列规则是什么

C语言中的字符串是由一系列字符组成的,以null字符('\0')作为结尾。字符串的排列规则是根据字符的顺序来决定字符串的排列顺序。具体来说,字符串的排列顺序是按照字符的ASCII码值从小到大的顺序排列的。例如,"abc"会排在"def"之
2023-10-21

c语言字符串加密的方法是什么

一种常见的C语言字符串加密方法是使用简单的替换算法,也称为凯撒密码。该方法通过将字符串中的每个字符按照固定的偏移量进行替换,从而实现加密和解密。具体步骤如下:定义一个偏移量(比如3),用于对字符串中的字符进行替换。遍历字符串中的每个字符
c语言字符串加密的方法是什么
2024-03-02

c语言字符串输出的方法是什么

在C语言中,可以使用printf函数来输出字符串。下面是一个简单的例子:#include int main() {char str[] = "Hello, World!";printf("%s\n", str); //
c语言字符串输出的方法是什么
2024-03-11

c语言截取字符串的方法是什么

在C语言中,可以使用strncpy()函数来截取字符串。strncpy()函数的原型如下:char *strncpy(char *dest, const char *src, size_t n);其中,dest是目标字符串,src是源字符
c语言截取字符串的方法是什么
2024-04-09

C++中C风格字符串的基本概念是什么

今天就跟大家聊聊有关C++中C风格字符串的基本概念是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++编程语言作为一款C语言的升级版本,支持C语言中的各种功能,有经验的编程人员
2023-06-17

c语言字符串赋值规则是什么

在C语言中,字符串可以被赋值给字符数组或者字符指针。1. 字符数组赋值:字符数组是一个固定长度的字符序列,可以通过直接赋值或通过strcpy()函数来赋值给字符串。例如:```cchar str1[10] = "Hello";char st
2023-08-18

Golong字符串拼接性能优化方法及原理是什么

这篇文章主要介绍了Golong字符串拼接性能优化方法及原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golong字符串拼接性能优化方法及原理是什么文章都会有所收获,下面我们一起来看看吧。1.字符串高效
2023-07-05

在C#的字符串中找到{0}是什么意思

在C#的字符串中,"{0}"表示一个占位符,用于将变量或表达式的值插入到字符串中的特定位置。这种语法通常用于格式化字符串,其中大括号内的数字表示要插入的值的索引。例如:```csharpstring name = "Alice";int a
2023-09-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录