保留实例化的 XmlSerializer

本文关键字:XmlSerializer 实例化 保留 | 更新日期: 2023-09-27 18:37:07

我有一个相当大的应用程序,它将~100个不同的类序列化为XML。由于在运行时创建 XML 序列化程序需要一些时间,因此我在加载应用程序时对最重要的类执行此操作。对于其他的,在需要时。

为了提高性能,我正在考虑以某种方式保留创建的序列化程序。

当我在谷歌上搜索这个问题时,我找到了Microsoft工具"sgen.exe"的方法。它允许您创建一个程序集,据我了解,该程序集将所有序列化程序保存到指定程序集中的类型。

当尝试为我的程序集执行此操作时,我认识到所有程序集(以及它使用的所有程序集)都需要签名。在我继续创建大量签名文件并开始为所有项目执行此操作之前,我只想确保我没有遗漏任何东西。

所以最后这是我的问题:如果我想在应用程序运行之前使 XML 序列化程序可用,这是要走的路吗?

我想将它们存储在 dll 中是"唯一的方法",但它们的创建方式对我来说似乎非常复杂。我不能以某种方式二进制序列化,比如说我需要的所有类型的序列化程序(List)的列表,在启动时加载它们,最后告诉框架使用它们吗?

问候

保留实例化的 XmlSerializer

创建序列化程序确实很慢。这应该不足为奇:毕竟创建序列化程序意味着反映您的类型并在运行时生成 (IL) 代码。使用 sgen 是要走的路:它做同样的事情,但在构建时执行,将该代码存储在磁盘上的程序集中,这样就不必在运行时生成它。

不能使用二进制序列化(二进制序列化可用于数据,不能用于代码)序列化程序的代码。嗯,事实上,代码当然可以存储在磁盘上,存储在程序集中,这正是sgen将为您做的。

最好

对包含可序列化类型的程序集进行签名,但这并不意味着需要对所有程序集进行签名。只需将可序列化类型放在单独的 dll 中,并仅对该类型进行签名。