C#字串學習筆記

iDotNetSpace發表於2009-04-27

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章