何时更改“生成序列化程序集”值
本文关键字:程序集 序列化 何时更 | 更新日期: 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
,而不是首次启动应用程序。我不能确定;这有点模棱两可。