我有一个.net 2.0 c#ClickOnce应用程序,它通过Web服务连接到其数据。我被告知可能加速应用程序的一种方法是事先生成序列化程序集。我在这方面有几个问题。
是否生成序列化程序集的默认设置是Auto。 VS2005使用什么标准来决定是否生成序列化程序集?它似乎不会在Debug配置下生成,但它在Release配置下生成,但我无法确定并且无法在任何地方进行信息。
序列化程序集实际上是否改善了应用程序的启动?具体来说它有什么改进?我真的需要序列化程序集吗?
答案 0 :(得分:14)
它真的在问“我应该预先生成序列化程序集并将其包含在已部署的项目中,还是应该回到默认情况下即时生成程序集?”一般来说,在第一次击球后不会造成太大的伤害。可以使用的地方是序列化程序集是在%SYSTEMROOT%\TEMP
中生成的。在某些情况下,该过程无法访问,在大多数情况下会导致致命异常。
答案 1 :(得分:6)
这与您的情况无关,但是预生成序列化程序集还有另一个很好的理由 - 在SQL Server(即SQLCLR)中托管代码时这是必要的。 SQL Server不允许动态生成这些程序集,因此您的序列化代码将在SQL Server内部失败。
答案 2 :(得分:4)
在大多数情况下,您不太可能从中看到巨大的好处,特别是如果您让应用程序保持打开状态一段时间。预生成序列化程序集主要有助于第一次时间(在exe生命周期内)将特定类型序列化为xml。
答案 3 :(得分:1)
根据Intellitrace,只有第一次对类型进行XML序列化时,才会抛出FileNotFoundException,然后捕获它。这意味着CLR希望加载一个包含该特定程序集的所有XML-Serializer的程序集,当它找不到时,抛出FileNotFoundException来指示XmlSerializer:"嘿!生成织补装配!"这就是在那期间发生的事情" Catch"然后存在以前未找到的文件。
我在某处读过使用try-catch逻辑是一个糟糕的练习。 IDK为何使用这种方法......