我该如何选择使用特定系统类的哪个版本?

4

最近我了解到,虽然.NET 2.0版本的StringBuilder被优化为ToString(),但.NET 4.0版本却是针对Append()进行优化的。这让我想知道——我是否可以在每种情况下选择使用哪个系统类的版本?

(这个问题不仅限于StringBuilder,适用于任何系统类。只是StringBuilder作为示例。)


1
我很肯定这会产生命名空间冲突,但我不确定,这是一个有趣的问题。然而,mono/Unity3d方面并不是很相关,因此我将其删除了。如果你想要一个特别针对Mono的答案,请随意撤销我的编辑或做一个新的来表明。 - Bobson
3
但是,你真的想要这样做吗?使用.Net 2.0版本的StringBuilder或任何其他类,你可以获得哪些具体的好处?你已经确定了在你的情况下是否有可衡量的改进吗?这种好处如何平衡旧代码的并行运行成本以及任何未预见的缺陷? - Jodrell
1
通常最新版本的框架性能最佳。即使其他版本可能有优势,但这听起来像是过早优化。如果当前版本导致性能问题,则应评估您的选项。 - paparazzo
@Jodrell 我现在并不真正需要它,我只是出于好奇而提出这个问题。 - Max Yankov
我必须承认,我对答案和这个想法很感兴趣。 - Jodrell
2个回答

0
你可以尝试像这样的代码:
<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="mySecondAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
          <!-- Publisher policy can be set only in the application configuration file. -->
          <publisherPolicy apply="no">
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

0

不可以。

通常系统类(或任何第三方库)可能会在幕后协作,使用私有数据进行通信(即那些标记为private或internal的项目)。

如果您尝试将错误的版本一起使用,则它们可能无法找到所期望的私有数据,并且会发生意外行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接