一篇翻译的 .Net 中字符串性能

发表于:2007-06-30来源:作者:点击数: 标签:
Introduction 你在代码中处理字符串的方法可能会对 性能 产生令人吃惊的影响。在本文中,我需要考虑两个由于使用字符串而产生的问题:临时字符串变量的使用和字符串连接。 Background 每个项目都有需要你为其考虑编码标准的时候。使用 FxCop 是一个好的开始

Introduction

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

 

Background

每个项目都有需要你为其考虑编码标准的时候。使用 FxCop 是一个好的开始。我最喜爱的一组 FxCop 规则是“性能”那组。

于是,我就用 FxCop 来检查我的项目并发现一系列的字符串问题。我必须承认一件事:我经常遇到与 C# 的不可变(immutable)的字符串有关的问题。当我看到 myString.ToUpper() 时,我经常都会忘记它并不是改变 myString 的内容而是返回一整个全新的字符串(这是由于 C# 中字符串是不可变的)。

我对代码进行一番修正以便去掉 FxCop 的警告,接着我就发现代码的确比之前快了。我决定开展调查,而最终我会写出上面那些测试的代码的。

 

Using the code

测试的代码很简单。一个控制台程序调用四个测试方法,其中每个方法执行一种字符串处理例程 1000 次(整个执行时间已经足够长以便看出其中的性能差别了)。

这四个测试方法被分成两组,每组两个。第一组比较两个方法,它们用于非大小写敏感(case-insensitive)的字符串比较。

 

String Comparison and Temporary String Creation

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

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

原文转自:http://www.ltesting.net