.NET String.Format 方法 线程安全问题
碰到这个问题 是在和淘宝做信息交互的时候, 接收别人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 方法 线程安全问题的更多相关文章
- VFP自定义函数StringFormat (仿.NET String.Format 方法)
VFP仿.NET String.Format 方法 将指定字符串中的每个{x}替换为相应值,并返回文本 *-- 调用格式 StringFormat("日期{2},字符{1}",&q ...
- php示例代码之类似于C#中的String.Format方法
php示例代码之类似于C#中的String.Format方法 原文来自于 http://stackoverflow.com/questions/1241177/c-string-format-equ ...
- 避免string.Format方法的装箱
我们知道,使用string.Format方法可能会存在装箱的情况.比如如下: static void Main(string[] args) { string s = string.Format(&q ...
- DateFormat的format()方法线程不安全的问题分析
最近看到<侦探剧场:堆内存神秘溢出事件>https://my.oschina.net/u/2368090/blog/1628720,于是自己也想测试了解一下DateFormat的多线程安全 ...
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...
- java字符串格式化:String.format()方法的使用
转自:http://kgd1120.iteye.com/blog/1293633 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的读者应 ...
- Java基础(三十五)Math、Random类和数字格式化(String.format方法)
一.Math类 Math类常用的方法: public static long abs (double a) 返回a的绝对值 public static double max (double a,dou ...
- String.format方法使用-浅析(转)
转自 https://blog.csdn.net/u010137760/article/details/82869637 1.代码中简单使用2.源码调用的方法3.相关类-Formatter3.1可选 ...
- Java String.Format() 方法及参数说明
转自:https://blueram.iteye.com/blog/441683 JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l ...
随机推荐
- 01-CALayer的基本操作
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- maven skip tests
DskipTests=true is short form of -Dmaven.test.skip=true
- EB(存储单位)
abbr.艾字节,1EB=1024PB 计算机的存储单位 位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位. 字节 byte:8个二进制位为一个字节 ...
- java中反射
Person.java===>>person.class ==>>jvm中的类加载器===>>class对象:代表内存中Person.class ==>> ...
- JavaScript实现样式表的简单切换
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- LINQ标准查询操作符详解(转)
一. 关于LINQ LINQ 英文全称是“Language-Integrated Query”,中文为“语言集成查询”,它是微软首席架构师.Delphi 之父和C# 之父——Anders ...
- windows svn
1.1Svn和VisualSvn介绍 VisualSvn Server2.5.6(版本控制服务器)免费开源软件 是基于Windows平台上的Subversion服务器,它是免费的 官方下载: http ...
- js的二元三元操作符
二元 if ( a == b) { alert(a) } // (a == b) && alert(a) if ( a != b) { alert(a) } // (a == b) | ...
- WWF3自定义活动<第八篇>
WWF提供了对原有活动进行扩展以及自定义新活动的功能,用户可以通过"Workflow Activity Library"创建和开发自定义活动. 一.自定义活动类型 默认情况下,创建 ...
- C#导出
#region DataReader 的数据导出到Excle 中 //public string Exports(string str_sql) //{ / ...