关于字符串为空的几个性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 本文通过实验对比了两种字符串赋值方式(`string str="";` 和 `string str=string.Empty;`)及五种判断字符串是否为空的方法的性能差异。实验结果显示,使用 `string.Empty` 的赋值方式性能更优,且在判断字符串是否为空时,`.Length==0` 方法最为高效,其次是 `str.Equals("")` 和 `str==string.Empty` 等方法。文章提供了详细的测试代码和结果分析。

来源:http://www.51testing.com

 今天突然有兴做了两下有关字符串为空的性能测试,与大家分享!结果如下:

  两种赋值方式的比较:

string str="";

  string str=string.Empty;

  理论上讲:

  string.Empty是一个Static的属性,使用时不分配存储空间,而在用""时,系统会分配一个长度为空的存储空间。不过编译系统应该会优化,也就是说,比如你程序中有10个地方用到了"",但好的编译系统应该引用的是同一个对象。所以用""也就是浪费一个对象空间而已。

实战:

测试程序如下:

namespace testEmpty

{

  class Program

  {

  static void Main(string[] args)

  {

  Test test = new Test();

  test.testEmpty();

  test.testEqualEmpty();

  Console.Read();

  }

  }

  class Test

  {

  public void testEmpty()

  {  string str;

  for (int i = 0; i < 10000; i++)

  {

  str = "";

  }

  }

  public void testEqualEmpty()

  {

  string str;

  for (int i = 0; i < 10000; i++)

  {

  str = string.Empty;

  }

  }

  }

  }

  测试过程是分别将赋值语句str=""和str=string.Empty用两个函数执行10000次,所用时间如下所示:

  所以说:单独执行testEmpty()执行10000次用了0.262669毫秒,单独执行testEqualEmpty()执行0.026849毫秒。前者是后者的10倍.

  下面介绍的是几种判断语句的比较:

  我想到的所有的判断空字符串的语句就这几种了,大家还有其它方法的欢迎讨论!

str == ""

  str.Equals("")

  str==string.Empty

  str.Equals(string.Empty)

  str .Length==0

测试程序如下:

using System;

  using System.Collections.Generic;

  using System.Text;

  namespace testEmpty

  {

  class Program

  {

  static void Main(string[] args)

  {

  Test test = new Test();

  test.test1();

  test.test2();

  test.test3();

  test.test4();

  test.test5();

  Console.Read();

  }

  }

  class Test

  {

  string str = string.Empty;

  public void test1()

  {

  for (int i = 0; i < 10000; i++)

  {  if (str == "")

  {

  Console.WriteLine("1 This string is emput");

  }

  }

  }

  public void test2()

  {

  for (int i = 0; i < 10000; i++)

  {

  if (str.Equals(""))

  {

  Console.WriteLine("2 This string is emput");

  }

  }

  }

  public void test3()

  {

  for (int i = 0; i < 10000; i++)

  {

  if (str==string.Empty)

  {

  Console.WriteLine("3 This string is emput");

  }

  }

  }

  public void test4()

  {

  for (int i = 0; i < 10000; i++)

  {

  if (str.Equals(string.Empty))

  {

  Console.WriteLine("4 This string is emput");

  }

  }

  }

  public void test5()

  {

  for (int i = 0; i < 10000; i++)

  {

  if (str .Length==0)

  {

  Console.WriteLine("5 This string is emput");

  }

  }

  }

  }

  }

  在这个测试程序中,用了5个分别含有这5种判断语句的方法,目的就是为了测试每个方法耗费的时间。

  在这里说明一下,笔者在这个程序中起的名字不可取,程序员不应该这样为方法起名字的,见笑了!

  测试结果如下:

  可以从这个方法耗费时间详细说明表中看出,这些方法耗费时间都比较,这主要是因为里面的Console.WriteLine()语句影响的。但是每个方法中都有这一语句,所以说它并不影响我们的比较结果!

得出的结论:在字符串为空时,这五种判断语句的耗费时间由短到长

str .Length==0

  str.Equals("")

  str==string.Empty

  str.Equals(string.Empty)

  str == ""

  需要说明的是:这只是在字符串为空时结果是这样的,那么字符串不为空时呢,结果又是怎样的呢?

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
11月前
|
测试技术 Python
软件测试|Python字符串拼接详细解析
软件测试|Python字符串拼接详细解析
100 0
|
4月前
|
机器学习/深度学习 移动开发 测试技术
《手把手教你》系列技巧篇(五十一)-java+ selenium自动化测试-字符串操作-下篇(详解教程)
【5月更文挑战第15天】自动化测试中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。
45 2
|
2月前
|
JSON 数据格式
Navicate数据报错之Bad Request,发送端口测试的时候,使用JSON字符串,而不是Text
Navicate数据报错之Bad Request,发送端口测试的时候,使用JSON字符串,而不是Text
|
4月前
|
搜索推荐 Java 测试技术
《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
【5月更文挑战第14天】本文介绍了自动化测试中如何从字符串中提取特定信息,主要讲解了两种方法:正则表达式和字符串切片操作。文章提供了一个测试场景,即在搜索引擎中搜索“北京宏哥”并比较百度和必应的搜索结果数量。通过字符串切片函数`split()`,可以从搜索结果的描述中提取出数字。代码示例展示了如何使用Java实现这个功能,包括在百度和必应的搜索页面获取结果数量,并进行比较。文章最后还简单提到了其他字符串截取的方法,如`substring()`和`StringUtils`类中的方法。
39 2
|
4月前
|
C# 图形学
【Unity 3D】C#中String类的介绍及字符串常用操作详解(附测试代码 超详细)
【Unity 3D】C#中String类的介绍及字符串常用操作详解(附测试代码 超详细)
140 0
|
4月前
|
人工智能 测试技术 程序员
软件测试/人工智能|一文告诉你Python字符串的相关操作
软件测试/人工智能|一文告诉你Python字符串的相关操作
65 0
|
存储 数据可视化 安全
Pandas字符串操作的各种方法速度测试
由于LLM的发展, 很多的数据集都是以DF的形式发布的,所以通过Pandas操作字符串的要求变得越来越高了,所以本文将对字符串操作方法进行基准测试,看看它们是如何影响pandas的性能的。因为一旦Pandas在处理数据时超过一定限制,它们的行为就会很奇怪。
104 0
|
JSON 测试技术 数据格式
JSON字符串直接转换为目标对象,并测试是否是深度转换
JSON字符串直接转换为目标对象,并测试是否是深度转换
239 0
|
Java 测试技术
C#使用base64对字符串进行编码和解码的测试
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
C#使用base64对字符串进行编码和解码的测试