ITPub博客

首页 > Linux操作系统 > Linux操作系统 > C#字符串学习笔记

C#字符串学习笔记

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-04-27 16:07:14 0 删除 编辑

1.       首先连接较小的字符串可以显著提高操作性能,因为这样可以使用告诉缓存。例如,考虑下面的代码:

str = str + “.” + Environment.NewLine

首先连接较小的字符串可以用到高速缓存并提高连接操作性能:

str = str + (“.” + Environment.NewLine)

2.       web开发中构造字符串发送到客户端也是有讲究的,考虑以下代码:

strHTML = “”;

strHTML = strHTML + “My name is:”;

strHTML = strHTML + Request.ServerVariables(“SERVER_NAME”);

strHTML = strHTML + “”;

Response.Write(strHTML);

 

这种连接方法容易理解,但效率低下,因为当声明strHTML时系统无法了解它需要占用多大的内存空间,仅当给变量赋值时,系统才知道分配多少内存空间,对于每一次附加的字符串连接操作,系统必须分配更多的内存空间,然后复制字符,要知道内存的分配和复制非常耗时间和资源!上面的代码段潜在的开始了4个互不相连的内存分配过程,这并不困难,但由于这是web页,对于每一次页面请求都要如此,如果该web页面每秒接收5个请求,则每秒会发生20次的内存分配和字符复制过程,天哪!

 

因此我们采用如下方式优化上述代码,将所有的字符串片断置入一个数组,然后把这些字符串片断连接为一个字符串:

string[] arrString = new String[3];

string strHTML;

arrString [0] = “”;

arrString [1] = “My name is:”;

arrString [2] = Request.ServerVariables(“SERVER_NAME”);

arrString [3] = “”;

strHTML = arrString[0] + arrString[1] + arrString[2] + arrString[3];

Response.Write(strHTML);

 

这样就减少了内存分配次数和复制次数。你还费解吗?

 

 

3.       字符串连接时最好保证字符串中不发生变化的部分声明为常量。对于单一的连接,不要使用StringBuilder,因为创建对象所耗费的系统开销会超出连接所带来的性能上的收益。对于单一的连接,可能的话,应该使用常量和其他的内置字符串,因为这样可以将性能提高3倍。

4.       如何分解句子到单词:

   static void Main(string[] args)
        {
            string str = "Hello Figael! I'm trying to searching data from this sentences. It's not difficult to be implemented in C#! What are you doing now?";
            char[] separators = { ' ', '.', '?', ',' ,'!'};
            int startPos = 0;
            int endPos = 0;
            do
            {
                endPos = str.IndexOfAny(separators, startPos);
                if (endPos == -1)
                    endPos = str.Length;
                if (endPos != startPos)
                    Console.WriteLine(str.Substring(startPos, (endPos - startPos)));
                startPos = (endPos + 1);
            } while (startPos < str.Length);
 
        }
5.       如果要循环建立一个庞大的字符数据块,就使用StringBuilder。
如果需要国际化的字符串,就只能使用方法Compare(),否则使用CompareOrdinal()。
如果只需要字符串是否相同,就应使用Equal()而不是CompareOrdinal()。
通常情况下使用方法Equal()而不是”=”运算符。
6.       格式说明符:C/c 货币计数 D/d 小数计数 E/e 科学计数 F/f 定点计数 G/g 通用计数
N/n 数字形式 X/x十六进制 P/p 百分数 R/r 往返

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-591952/,如需转载,请注明出处,否则将追究法律责任。

下一篇: CheckBox三种状态
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5348057