码迷,mamicode.com
首页 > 编程语言 > 详细

.NET String.Format 方法 线程安全问题

时间:2015-09-06 20:03:25      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

   

     碰到这个问题 是在和淘宝做信息交互的时候, 接收别人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的 没有。 为了方便别人查询 更容易聊了嘛  

             反正做开发的 不是掉这坑里,就是还在那个坑里爬着。

 

 

 

      

 

 

.NET String.Format 方法 线程安全问题

标签:

原文地址:http://www.cnblogs.com/atliwen/p/4786736.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!