[提问]net2.0的dll被4.0的程序或站点引用,底层是使用4.0的core还是2.0的core呢?

游北亮
博客专家认证
2013-10-12 10:25:17
先分享一个net4.0的优化点,在4.0出来以前,我一直都不推荐使用String.Format方法,因为这个方法反编译得到的代码如下:
StringBuilder stringBuilder = new StringBuilder(format.Length + args.Length * 8);
stringBuilder.AppendFormat(provider, format, args);
return stringBuilder.ToString();


后来4.0出来后,这个方法已经优化了,反编译得到的代码如下,对StringBuilder进行了缓存:
StringBuilder stringBuilder = StringBuilderCache.Acquire(format.Length + args.Length * 8);
stringBuilder.AppendFormat(provider, format, args);
return StringBuilderCache.GetStringAndRelease(stringBuilder);


由此得到一个疑问,如果我编译了一个net2.0的dll,这个dll被4.0的项目引用了,在运行时,到底是采用2.0的String.Format还是4.0的??

另外,这个东东除了分析dump,有其它方法可以验证吗?

btw:net4.0的StringBuilder也进行了大幅度优化,不再有大对象的产生了,可以参考:http://www.th7.cn/Program/net/2012/01/06/54152.shtml

所以,建议后续的项目都升级到4.0吧,我也可以放心的使用String.Format了
...全文
182 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-10-12
  • 打赏
  • 举报
回复
这里有中文的 http://msdn.microsoft.com/zh-cn/library/db7849ey(v=vs.90).aspx 再看不懂,一句话,加载的是4.0的。
游北亮 2013-10-12
  • 打赏
  • 举报
回复
从这里看到 http://stackoverflow.com/questions/8864395/running-net-4-0-app-with-reference-to-2-0-library-on-machine-with-only-4-0-fram In other words, you will be able to load 4, 5 and 2.0 in the same process, but you will not be able to load 1.1 and 2.0 in the same process. 英文水平不太好,不知道是不是跟2楼兄弟的理解一致
lcawen 2013-10-12
  • 打赏
  • 举报
回复
调用2.0的,支持2楼,你只装了4.0没装2.0,在编译或者运行的时候会报错,这个问题我遇到过,假如说你用.net3.5编译的dll,你在装了.net4.0没有装.net3.5是不可以使用的
bwangel 2013-10-12
  • 打赏
  • 举报
回复
肯定是调用4.0的了。 因为String.Format是调用的.net类库里的函数, 假设你的机器只装了4.0没装2.0, 那不是要挂?
hard_learner 2013-10-12
  • 打赏
  • 举报
回复
我也觉得是2楼的意思
rtdb 2013-10-12
  • 打赏
  • 举报
回复
引用 1 楼 youbl 的回复:
重复一下我的疑问: 如果我编译了一个net2.0的dll,这个dll被4.0的项目引用了,在运行时,到底是采用2.0的String.Format还是4.0的??
我相信是编译期绑定,就始终调用2.0的API。 否则莫名其妙的运行期BUG会太多了。
游北亮 2013-10-12
  • 打赏
  • 举报
回复
重复一下我的疑问: 如果我编译了一个net2.0的dll,这个dll被4.0的项目引用了,在运行时,到底是采用2.0的String.Format还是4.0的??
游北亮 2013-10-12
  • 打赏
  • 举报
回复
对2台服务器进行了调整,代码未做任何改动,对应的cpu优化效果如下:


注:绿色部分是特权cpu
游北亮 2013-10-12
  • 打赏
  • 举报
回复
感谢版主,看来楼上很多兄弟跟我一样,基础知识不牢固,哈
引用 7 楼 caozhy 的回复:
这里有中文的 http://msdn.microsoft.com/zh-cn/library/db7849ey(v=vs.90).aspx 再看不懂,一句话,加载的是4.0的。
梨花树下思考 2013-10-12
  • 打赏
  • 举报
回复
应该是4.0的吧 你可以试试报这样的程序部署到只安装4.0的机器上运行一下,如果能运行说明就是4.0吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧