【问题标题】:Assembly Serialization, Why?汇编序列化,为什么?
【发布时间】:2011-03-12 05:42:05
【问题描述】:

我了解到程序集序列化 (sgen.exe) 可以提高性能。 究竟是什么提供了改进? 它是类型上的元数据吗?我原以为这可以通过反射获得!那么为什么在单独的程序集中需要它呢?

【问题讨论】:

标签: c# .net reflection serialization assemblies


【解决方案1】:

序列化程序集 Data.XmlSerializers.dll 可提高使用 XML Web 服务代理与服务器通信的客户端的性能,请参阅http://msdn.microsoft.com/en-us/library/bk3w6240.aspx

如果您不这样做,同样的工作将在首次使用 XmlSerializer 时完成。在博客http://blogs.msdn.com/b/billwert/archive/2008/02/23/use-of-sgen-exe-to-avoid-common-xmlserializer-performance-pitfalls.aspx 中描述了application.config 文件的<system.diagnostics> 区域中的附加设置,以了解更多XmlSerializer 在后台的作用。

在 Visual Studio 中,项目设置的“构建”选项卡中有一个参数设置(请参阅http://www.eggheadcafe.com/tutorials/aspnet/8eb0e68f-5496-4363-9cb9-dd68447ba187/xml-serializer-generator.aspx)。所以你真的不需要手动使用 sgen.exe。

要更了解 sgen.exe 是做什么的,您可以加载 sgen.exe 的开源版本:xgenplus http://xgenplus.codeplex.com/

我建议你也阅读SGEN XMLSerializer - should be .XMLSerializers.dll added as a reference to the current project or to the GAC?

如果您在 google 中搜索 XmlSerializer 和 sgen,您会在搜索结果的第一页找到所有信息,甚至更多信息。

【讨论】:

  • Oleg,感谢您的详细回复,不幸的是它没有回答我的问题,我不是在问什么是序列化,但为什么序列化您的程序集如何提高性能?上下文是桌面应用程序而不是 Web。预序列化程序集如何提高 clr 性能?谢谢。
  • 在我发布的链接中,您可以读到XmlSerializer 的实现需要这种组装。在第一次使用XmlSerializer 时,它会验证程序集是否不存在,它会在 TEMP 目录中创建它。这需要很多时间。如果XmlSerializer 找到一个预先创建的程序集,它会使用它并且您的程序可以快速运行。你同意吗?
  • 文章不清楚“当您使用 XmlSerializer 时,会创建一个具有自定义类型的帮助程序程序集 (1),用于序列化您的类型。C# CodeDom 用于生成此代码,然后由 C# 编译器编译。然后运行时必须加载这个生成的程序集,并 JIT 代码。........“这是否意味着 CLR 在加载程序集时总是使用 XMLSerializer?然后发生上述步骤。如果是这样,那就是我正在寻找的。 CLR 尝试序列化正在加载的程序集,如果已经存在,则使用该序列化程序集。
  • 我想你现在正确理解了。您的程序将使用您针对项目设置的 sgen.exe 创建的程序集,或者您的程序将动态执行相同的工作(在 %TEMP% 目录中生成相应的程序集,然后使用它)。您一直使用“序列化程序集”,这是错误的。正确的是“序列化程序集”,但这些只是文字。重要的是要了解您的程序(使用 XmlSerializer)是如何真正工作的。
  • 可爱的奥列格。这就是我一直在寻找的。干杯。
猜你喜欢
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2010-10-30
  • 2010-11-02
  • 2018-12-05
  • 2010-11-28
  • 2011-07-02
  • 2011-02-10
相关资源
最近更新 更多