因為c#的字串留用機制,下面的**:
string thekey1 = "******";
string thekey2 = "******";
if (object.referenceequals(thekey1, thekey2))
thekey1,thekey2指向的是同乙個位址.但下面的**:
int thea = 1;
string thekey1 = "***"+thea;
string thekey2 = "***"+thea;
if (object.referenceequals(thekey1, thekey2))
中thekey1,thekey2引用是不相等的.說明c#的字串留用機制僅針對字串常量.
從上面的特性,其實lock的時候最好不要用字串,特別是拼接的字元,會沒有效果.
我本來想利用這種拼接特性來完成不同級別的分層加鎖,但經過測試沒有效果.後面改用了其它方法才得以實現.
ps:字串的留用機制其實就是在分配字串記憶體時,先找是否有,如果有則不分配,直接用.這種機制雖然可以節省一定的空間,但在效能上會有所損失,而且如果字串過於碎化,反而會浪費空間和時間.字串的不變性有利於並行程式設計.但lock機制沒有利用字串的這種內容相等性,是有點可惜的.
字串留用與字串池
1 關於字串操作對應用程式效能的影響 字串相等性檢查是應用程式常見的操作,於此同時,這也是一種嚴重損害效能的操作.執行序號 字串的二進位制 相等行檢查時,clr會進行以下操作 1 判斷字串的長度是否相等,不相等,比較結果直接返回false,如果相等,繼續下一步操作 2 比較字串的長度相等,clr會比...
C 字串駐留機制 通過lock來解答
string型別的字串在建立和初始化時系統會檢查記憶體中是否存在一樣的值,如果一樣就不會開闢新的空間,而是使用記憶體中相同字串的位址,因此在lock string 不同執行緒同時訪問lock塊時會發生阻塞,所以lock string 是有一定的風險的,當然這也要看具體的應用場景 此例子使用三個字串變...
C風格字串與C 風格字串
c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...