序列化assembly。 是否需要?

我有一个.net 2.0 c#ClickOnce应用程序,它通过Web服务连接到它的数据。 我被告知可能加速应用程序的一种方法是事先生成序列化程序集。 我在这方面有几个问题。

  1. 是否生成序列化程序集的默认设置是Auto。 VS2005使用什么标准来决定是否生成序列化程序集? 看起来它不会在Debug配置下生成,但它在Release配置下生成,但我无法确定并且无法在任何地方获取信息。

  2. 序列化程序集实际上是否改善了应用程序的启动? 具体来说它有什么改进? 我真的需要序列化程序集吗?

它实际上是在问“我应该预先生成序列化程序集并将其包含在已部署的项目中,还是应该回到默认情况下即时生成程序集?” 一般来说,在第一次打击之后不会造成太大伤害。 它可以在哪里播放序列化程序集在%SYSTEMROOT%\TEMP中生成。 在某些情况下,该过程无法访问,在大多数情况下会导致致命exception。

这与您的情况无关,但是预生成序列化程序集还有另一个很好的理由 – 在SQL Server(即SQLCLR)中托管代码时这是必要的。 SQL Server不允许动态生成这些程序集,因此您的序列化代码将在SQL Server中失败。

在大多数情况下,您不太可能从中看到巨大的好处,特别是如果您保持应用程序打开一段时间。 预生成序列化程序集主要有助于一次(在exe生命周期内)将特定类型序列化为xml。

根据Intellitrace,只有在第一次对类型进行XML序列化时,才会抛出FileNotFoundException然后捕获它。 这意味着CLR希望加载一个包含该特定程序集的所有XML-Serializer的程序集,当它找不到时,抛出FileNotFoundException来指示XmlSerializer:“嘿!生成darn程序集!” 这就是“Catch”期间发生的事情,然后存在以前未找到的文件。

我在某处读过使用try-catch逻辑是一个糟糕的练习。 IDK为什么微软使用这种方法……