.NET String.Format 方法 執行緒安全問題

atliwen發表於2015-09-06

   

     碰到這個問題 是在和淘寶做資訊互動的時候, 接收別人N年前的程式碼。

     程式碼邏輯很簡單,就是取得資訊 資料庫查詢  響應請求返回結果。

     最近淘寶的人反映說 N多賬戶使用的是一個單號。理論上來說 是應該每次都不一樣的。 最坑爹的是還出現了 資料庫中沒資料 但是響應結果卻有資料了的神奇現象!

     反編譯程式碼,整理後發現 邏輯很簡單。

     尼瑪 問題找不到怎麼辦???!!

     第二個反映就是 可能出現併發了。 

     一行一行的排查可能出現的併發的地方。 最後發現  String.Format 很有肯能 。 百度後發現 全都是JAVA 中的 String.Format  會出現執行緒安全問題。 

     .NET 中怎麼樣沒人說過。。。

     MSDN上 對 String.Format  沒有說是否是執行緒安全的。  但是說 Sring 是 執行緒安全的!  很容易讓人 覺得  String.Format  是也是執行緒安全的

 

     反編譯  String 類

 

    

        public static string Format(IFormatProvider provider, string format, params object[] args)
        {
            if ((format == null) || (args == null))
            {
                throw new ArgumentNullException((format == null) ? "format" : "args");
            }
            StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
            builder.AppendFormat(provider, format, args);
            return builder.ToString();
        }

     

       String.Format 內部是呼叫的 StringBuilder 來處理的 字串。

          所以   String.Format 是執行緒不安全的。

      

       PS:

                之所以發個貼  是為了別人查詢的時候方便點。     搜尋 String.Format 全都是JAVA的 解釋。 .NET的 沒有。 為了方便別人查詢 更容易聊了嘛  

             反正做開發的 不是掉這坑裡,就是還在那個坑裡爬著。

 

 

 

      

 

 

相關文章