Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 持久化实例化XmlSerializer_C#_.net_Xml Serialization_Persistence - Fatal编程技术网

C# 持久化实例化XmlSerializer

C# 持久化实例化XmlSerializer,c#,.net,xml-serialization,persistence,C#,.net,Xml Serialization,Persistence,我有一个相当大的应用程序,它将大约100个不同的类序列化为XML。 因为在运行时创建XML序列化程序需要一些时间,所以我在加载应用程序时为最重要的类执行此操作。其他的,需要的时候 为了提高性能,我考虑以某种方式持久化创建的序列化程序 当我在谷歌上搜索这个问题时,我发现了一种使用微软工具“sgen.exe”的方法。它允许您创建一个程序集,据我所知,该程序集保存指定程序集中的所有序列化程序类型 当尝试对我的程序集执行此操作时,我认识到所有程序集(以及它使用的所有程序集)都需要签名。在我继续创建很多签

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

为了提高性能,我考虑以某种方式持久化创建的序列化程序

当我在谷歌上搜索这个问题时,我发现了一种使用微软工具“sgen.exe”的方法。它允许您创建一个程序集,据我所知,该程序集保存指定程序集中的所有序列化程序类型

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

最后,我的问题是: 如果我想让我的XML序列化程序在应用程序运行之前可用,那么这是一种方法吗

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


创建序列化程序确实很慢。毫不奇怪:毕竟,创建序列化程序意味着在运行时对类型进行反思并生成(IL)代码。使用sgen是一种方法:它做同样的事情,但在构建时做,将代码存储在磁盘上的程序集中,这样就不必在运行时生成代码

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


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

签名时要小心,一旦你对程序集进行了签名,你使用的所有其他程序集也必须进行签名。你是否100%确定实例化序列化程序是你应用程序的瓶颈?我怀疑序列化过程本身将是一个更耗时的操作。不,当然不是,但这是我想改进的许多方法中的一点,所以我想没有其他方法了?将所有这些数据类重构到另一个项目将是非常广泛的。。。