碰到这个问题 是在和淘宝做信息交互的时候, 接收别人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 方法 线程安全问题的更多相关文章

  1. VFP自定义函数StringFormat (仿.NET String.Format 方法)

    VFP仿.NET String.Format 方法 将指定字符串中的每个{x}替换为相应值,并返回文本 *-- 调用格式 StringFormat("日期{2},字符{1}",&q ...

  2. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  3. 避免string.Format方法的装箱

    我们知道,使用string.Format方法可能会存在装箱的情况.比如如下: static void Main(string[] args) { string s = string.Format(&q ...

  4. DateFormat的format()方法线程不安全的问题分析

    最近看到<侦探剧场:堆内存神秘溢出事件>https://my.oschina.net/u/2368090/blog/1628720,于是自己也想测试了解一下DateFormat的多线程安全 ...

  5. Java中利用MessageFormat对象实现类似C# string.Format方法格式化

    我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...

  6. java字符串格式化:String.format()方法的使用

    转自:http://kgd1120.iteye.com/blog/1293633 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的读者应 ...

  7. Java基础(三十五)Math、Random类和数字格式化(String.format方法)

    一.Math类 Math类常用的方法: public static long abs (double a) 返回a的绝对值 public static double max (double a,dou ...

  8. String.format方法使用-浅析(转)

    转自  https://blog.csdn.net/u010137760/article/details/82869637 1.代码中简单使用2.源码调用的方法3.相关类-Formatter3.1可选 ...

  9. Java String.Format() 方法及参数说明

    转自:https://blueram.iteye.com/blog/441683 JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l ...

随机推荐

  1. Linux-Apache+Mysql+PHP+PHPWind(重点Apache+PHP集成环境)

    整理Apache+Mysql+PHP+PHPWind(Apache+PHP集成环境) 一.情况简述: 1.虚拟机VM上面CentOS 2.全部yum安装(yum安装与源码安装的安装路径不同) 二.操作 ...

  2. Postman使用小技巧 - 用Postman生成Request代码

    Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来 ...

  3. Java后台工程师面试杂记——不跳不涨工资星人跳槽经历

    经过接近一个月的时间,完成换工作这件“小事”,前后总计面试了多家公司,最后也没接到几个offer,不过最终总算尘埃落定,就对这个过程进行一个总结吧. 在某互联网公司工作了近一年的时间,但是频繁的业务需 ...

  4. mysql创建远程用户

    grant all privileges on *.* to myuser@"%" identified by 'password'; 用root用户登陆,然后: grant al ...

  5. Swift学习—字符串&数组&字典

    字符串 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" ...

  6. 用C#访问SSRS自动导出SSRS报表

    一.              新建一个winform应用程序WindowsFormsApplication1 二.              添加web引用 . 报表服务:http://dbpdhk ...

  7. 【Linux】自动化部署可信任登录

    Linux信任登录,免密码登录的脚本: 需要安装expect,可以yum也可以编译安装,编译后注意脚本中的expect路径. rsa.exp #!/usr/bin/expect ########### ...

  8. css实现div悬浮层,始终停留在浏览器的最下方,不随页面的滚动条滚动改变位置或消失

    .bottom_xf{ background-color:#1D69A9; width:100%; height:2.8em; margin:0 auto; overflow:hidden; posi ...

  9. Sublime 3114 + 转换GBK方法

    下载地址: http://files.cnblogs.com/files/wuyifu/Sublime_Text_Build_3114_x64_Setup.zip -– BEGIN LICENSE - ...

  10. Windows server 2008 R2远程桌面终端连接数的破解

    Windows server 2008 R2远程桌面终端连接数的破解 日常工作中,经常需要远程连接到服务器上,然而在公司里,老总.同事都需要连接到服务器上,而默认的服务器系统同时连接的最大连接数只有2 ...