【问题标题】:Serialization Assembly. Is it needed or not?序列化程序集。是否需要?
【发布时间】:2010-10-29 22:34:55
【问题描述】:
我有一个 .net 2.0 c# ClickOnce 应用程序,它通过 Web 服务连接到它的数据。有人告诉我,可能加速应用程序的一种方法是预先生成序列化程序集。在这方面我有几个问题。
是否生成序列化程序集的默认设置为自动。 VS2005 使用什么标准来决定是否生成序列化程序集?好像在Debug配置下不会生成,但在Release配置下会生成,但我无法确定,也无法在任何地方提供信息。
序列化组装真的能改善应用程序的启动吗?具体有什么改进?我真的需要序列化程序集吗?
【问题讨论】:
标签:
c#
web-services
serialization
assemblies
clickonce
【解决方案1】:
它实际上是在问“我应该预先生成序列化程序集并将其包含在部署的项目中,还是应该退回到动态生成程序集的默认设置?”一般来说,在第一次击球后不会受到太大伤害。它可以发挥作用的是序列化程序集是在%SYSTEMROOT%\TEMP 中生成的。在某些情况下,进程无法访问,在大多数情况下会导致致命异常。
【解决方案2】:
这与您的情况无关,但预先生成序列化程序集还有另一个很好的理由 - 在 SQL Server(即 SQLCLR)中托管您的代码时这是必要的。 SQL Server 不允许动态生成这些程序集,因此您的序列化代码将在 SQL Server 中失败。
【解决方案3】:
在大多数情况下,您不太可能从中获得巨大的好处,尤其是在您将应用程序保持打开一段时间的情况下。预生成序列化程序集主要有助于第一次次(在 exe 生命周期中)将特定类型序列化为 xml。
【解决方案4】:
根据 Intellitrace,只有第一次对类型进行 XML 序列化时,才会抛出 FileNotFoundException 然后被捕获。这意味着 CLR 期望加载一个包含该特定程序集的所有 XML-Serializer 的程序集,当找不到它时,抛出 FileNotFoundException 以向 XmlSerializer 发出信号:“嘿!生成该死的程序集!”这就是在“Catch”期间发生的事情,然后存在以前未找到的文件。
我在某处读到过,将 try-catch 用于逻辑是一种不好的练习。 IDK 为什么微软使用这种方法...