.net 何时更改“生成序列化装配件”值?

utugiqy6  于 2022-12-27  发布在  .NET
关注(0)|答案(1)|浏览(119)

我有一个客户端winform应用程序,连接到WCF的本地网络服务器。客户端有一个性能问题,我搜索了解决方案,发现了这篇文章。
上面写着:
这听起来像是在运行时创建序列化程序集。请尝试更改项目属性窗口的“生成”窗格底部的“序列化程序集”下拉列表的设置。
我的问题是何时更改 Generate Serialization Assembly 值以及应将其更改为什么值以提高客户端应用程序的性能?
我的代码是在C#,框架4,构建在VS2010Pro。

7fyelxc5

7fyelxc51#

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

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

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

      • 启用**:使用Sgen.exe在编译时生成序列化程序集。这将节省启动时间,但会增加部署大小。
      • Auto**:发行版配置的默认值。正式地说,只有在你的代码中使用了XmlSerializer的情况下才会生成汇编,每个MSDN(谢谢,@L-Three)。在我的测试中,这并不总是有效,所以如果你使用XmlSerializer,我建议显式地将它设置为On

所以,我的答案是:如果您关心启动时间,并且您使用了Serializable属性(即使只使用了一次),请将该选项设置为On。如果您更关心部署大小,请将其更改为Off。我不再将其设置为Auto,因为我不信任它。正如我所说,它似乎与Off相同,但我不会指望它。
编辑:我在区分Off和Auto时确实遇到了一些麻烦。这种区别在任何地方都没有明确的定义。如果你使用Serializable属性,我会坚持使用On,如果你不使用,我会坚持使用Off。我不会考虑部署大小或启动时间。如果我坚持这一规则,我似乎遇到了更少的与序列化相关的bug。

更新:

在回顾了上面提到的源代码之后,我相信"startup"指的是第一次在任何给定的类型上使用XmlSerializer,而不是最初的应用程序启动。有点模棱两可。

相关问题