何时更改“生成序列化程序集”值

本文关键字:程序集 序列化 何时更 | 更新日期: 2023-09-27 18:23:36

我有一个客户端winform应用程序,它连接到WCF的本地网络服务器。客户端存在性能问题,我搜索了解决方案并找到了这篇文章。

上面写着:

这听起来像是在运行时创建的序列化程序集。尝试更改底部"序列化程序集"下拉列表的设置的"生成"窗格。

我的问题是何时更改生成序列化程序集的值,我应该将其更改为什么值以提高客户端应用程序的性能

我的代码是C#,框架4,在VS2010Pro中构建的。

何时更改“生成序列化程序集”值

为了序列化类/结构,需要生成序列化程序集。这可能发生在编译时或运行时。Sgen.exe用于在compiletime生成序列化程序集;正如您所发现的,Visual Studio可以选择性地自动执行此过程。

  • 关闭:调试配置的默认设置(谢谢,@Alexandru Lache)。不要在编译时生成序列化程序集。根据MSDN,每次运行应用程序时都会生成序列化程序集:

    如果不使用XML序列化程序生成器,则每次运行应用程序时,XmlSerializer都会为每个类型生成序列化代码和序列化程序集。为了提高XML序列化启动的性能,请使用Sgen.exe工具提前生成这些程序集。然后可以将这些程序集与应用程序一起部署。

  • 打开:使用Sgen.exe在编译时生成序列化程序集。这节省了启动时间,但增加了部署大小
  • 自动:发布配置的默认设置。根据MSDN,只有在代码中使用XmlSerializer时,才会正式生成程序集(谢谢@L-Three)。在我的测试中,这并不总是有效的,所以如果您使用XmlSerializer,我建议将其明确设置为On

因此,我的答案是:如果你关心启动时间,并且你甚至使用了一次Serializable属性,请将选项设置为On。如果你更关心部署大小,请将其更改为Off。我再也不会把它留在Auto上,因为我不信任它。就像我说的,它似乎和Off一样,但我不会指望它。

编辑:我在区分"关闭"answers"自动"之间肯定有一些困难。差异在任何地方都没有明确定义。如果您使用Serializable属性,我会坚持使用On,如果您不使用,则使用Off。我不会考虑部署规模或启动时间。如果我坚持这个规则,我只会遇到更少的与序列化相关的错误。

更新:

在回顾了上述来源后,我认为"启动"是指第一次在任何给定类型上使用XmlSerializer,而不是首次启动应用程序。我不能确定;这有点模棱两可。