我有一个客户端winform应用程序,连接到WCF的本地网络服务器。客户端有一个性能问题,我搜索了解决方案,发现了这篇文章。上面写着:这听起来像是在运行时创建序列化程序集。请尝试更改项目属性窗口的“生成”窗格底部的“序列化程序集”下拉列表的设置。我的问题是何时更改 Generate Serialization Assembly 值以及应将其更改为什么值以提高客户端应用程序的性能?我的代码是在C#,框架4,构建在VS2010Pro。
7fyelxc51#
为了序列化类/结构,需要生成序列化程序集。这可能发生在编译时或运行时。Sgen.exe用于在编译时生成序列化程序集;正如您所发现的,Visual Studio可以选择自动执行此过程。
如果未使用XML序列化程序生成器,则每次运行应用程序时,XmlSerializer都会为每种类型生成序列化代码和序列化程序集。若要提高XML序列化启动的性能,请使用Sgen.exe工具预先生成这些程序集。然后,可以将这些程序集与应用程序一起部署。
XmlSerializer
On
所以,我的答案是:如果您关心启动时间,并且您使用了Serializable属性(即使只使用了一次),请将该选项设置为On。如果您更关心部署大小,请将其更改为Off。我不再将其设置为Auto,因为我不信任它。正如我所说,它似乎与Off相同,但我不会指望它。编辑:我在区分Off和Auto时确实遇到了一些麻烦。这种区别在任何地方都没有明确的定义。如果你使用Serializable属性,我会坚持使用On,如果你不使用,我会坚持使用Off。我不会考虑部署大小或启动时间。如果我坚持这一规则,我似乎遇到了更少的与序列化相关的bug。
Serializable
在回顾了上面提到的源代码之后,我相信"startup"指的是第一次在任何给定的类型上使用XmlSerializer,而不是最初的应用程序启动。有点模棱两可。
1条答案
按热度按时间7fyelxc51#
为了序列化类/结构,需要生成序列化程序集。这可能发生在编译时或运行时。Sgen.exe用于在编译时生成序列化程序集;正如您所发现的,Visual Studio可以选择自动执行此过程。
如果未使用XML序列化程序生成器,则每次运行应用程序时,XmlSerializer都会为每种类型生成序列化代码和序列化程序集。若要提高XML序列化启动的性能,请使用Sgen.exe工具预先生成这些程序集。然后,可以将这些程序集与应用程序一起部署。
XmlSerializer
的情况下才会生成汇编,每个MSDN(谢谢,@L-Three)。在我的测试中,这并不总是有效,所以如果你使用XmlSerializer
,我建议显式地将它设置为On
。所以,我的答案是:如果您关心启动时间,并且您使用了
Serializable
属性(即使只使用了一次),请将该选项设置为On。如果您更关心部署大小,请将其更改为Off。我不再将其设置为Auto,因为我不信任它。正如我所说,它似乎与Off相同,但我不会指望它。编辑:我在区分Off和Auto时确实遇到了一些麻烦。这种区别在任何地方都没有明确的定义。如果你使用Serializable属性,我会坚持使用On,如果你不使用,我会坚持使用Off。我不会考虑部署大小或启动时间。如果我坚持这一规则,我似乎遇到了更少的与序列化相关的bug。
更新:
在回顾了上面提到的源代码之后,我相信"startup"指的是第一次在任何给定的类型上使用
XmlSerializer
,而不是最初的应用程序启动。有点模棱两可。