何时更改“生成序列化assembly”值?

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

它说那里:

这听起来像是在运行时创建的序列化程序集。 尝试更改项目属性窗口的“构建”窗格底部的“序列化程序集”下拉列表的设置。

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

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

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

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

    当不使用XML Serializer Generator时,每次运行应用程序时,XmlSerializer都会为每种类型生成序列化代码和序列化程序集。 若要提高XML序列化启动的性能,请使用Sgen.exe工具预先生成程序集的程序集。 然后可以使用应用程序部署这些程序集。

  • On :使用Sgen.exe在编译时生成序列化程序集。 这样可以节省启动时间,但会增加部署规模。
  • 自动 :发布配置的默认值。 按照官方的XmlSerializer ,只有在代码中使用XmlSerializer才会生成程序集,每个MSDN (谢谢, @ L-Three )。 在我的测试中,这并不总是有效,所以如果您使用的是XmlSerializer ,我建议将其明确设置为On

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

编辑:我肯定在区分Off和Auto方面遇到了一些麻烦。 任何地方都没有明确区别。 如果您完全使用Serializable属性,我会坚持使用On,如果不使用,我会坚持使用Off。 我不会考虑部署大小或启动时间。 如果我遵守该规则,我似乎只会遇到更少与序列化相关的错误。

更新:

在对所提到的来源进行审查之后,我认为“启动”是指第一次在任何给定类型上使用XmlSerializer ,而不是初始应用程序启动。 我不能确定; 这有点模棱两可。