一、字符:.NET FrameWork中字符總是表示成16位的 Unicode值。
二、字符和數字轉化有三種方式 直接轉化、Convert、IConvertible
三、字符串: string 存在於堆上屬於引用類型。
字符串拼接建議使用 StringBuilder,因爲每次+號拼接會產生額外的內存開銷,產生新的字符串。
四、字符串比較:
StringComparison.Ordinal 效率較高,先看字符數數量相等的話纔開始比較,否則直接返回false ,這是忽略語言環境的前提下。
System.StringComparer:適合大量字符串,反覆執行同一比較。具體機制沒有研究。
五、字符串留用:簡單的說就是爲了節省內存消耗,共享字符串。原理是 一個Hash表,表中是一個個字符串,單是實際內存是在堆上。Hash特性 key的唯一性。達到了共享。
六、字符串池:編譯源碼時候將單個字符串多個實例合併成一個。在編譯字符串源碼插入到元數據時候。元數據中該字符串的引用被修改爲,引用同一個字符串實例(就剛被合併過後的那個實例)。這種技術叫做字符串池。而不是和線程池中線城池一樣的概念。
七、字符串編碼: 字節在傳輸過程中需要編碼,響應的接收方需要解碼。爲了安全、信息不丟失、等等就要編碼解碼。
抽象類Encoding有個靜態屬性GetEncoding 靜態屬性是全局的公用的因此不會構建額外的對象,可以減少GC壓力,首選該屬性。
Encoding.GetEncoding("abc");
System.Text.UnicodeEncoding.GetEncoding("abv");//繼承自 抽象類 Encoding
System.Text.UTF8Encoding.GetEncoding("abv");//繼承自 抽象類 Encoding
因此後面的兩個是抽象類Encoding的派生類,會產生額外的對象
八、字節流編碼:System.Net.Sockets.NetworkStream 的編碼方式2種方案第一種上面的Encoding來編碼,單是Encoding方式獲取字節流時候需要是 2的倍數。因此還要利用獲取數量的方式然後處理最末尾的字節流是否是2的倍數。因此有一個簡單的方式就是Base64:他用System.Convert的靜態方法來實施解碼編碼。
九、安全字符串:System.Security.SecureString 用法如下
他是在非託管內存中的加密字符串。僅僅在你調用她的 幾個屬性時候才處於未加密狀態,
AppendCahr、InSertAt、RemovAt、SetAt時候。