我们为大量C#类型提供了自定义序列化过程。但是,重新生成所有类/类型的所有序列化信息非常耗时,我们计划通过计算文件的散列来优化序列化过程,如果不同,我们生成序列化输出,否则我们跳过它。 编辑:我们可以将哈希存储在一个字典中,该字典可以输出到文件并在处理时重新读取。这是当前的想法。
我们当前的序列化处理器的工作原理如下 - 我们将要序列化的类型添加到repo:
SerializerRepo.Add(typeof(MyType)); //Add type to be serialized to a repo
然后(可能在代码的其他地方)让序列化程序处理repo并输出自定义XML等。
Serializer.WriteXML(SerializerRepo.GetTypes());
WriteXML
遍历每种类型,并为特定位置的每种类型喷出XML文件。我需要优化WriteXML
方法,只有序列化类/类型(如果已更改),否则让它成为。
这可能不是最好的方法,并且可以提供重构建议。但是,当前的问题是如何确定容纳类/类型的类定义(或文件)是否已更改以确定是否应生成XML?
由于类和相应的类之间没有固有的关系,因为类可以是部分的,因此.Net没有从类型到类文件的任何这种映射,反之亦然。但是,我们没有任何部分课程。但在我们的例子中,我们似乎需要两个(尽管是无关的)信息 - 包含类型/类和文件类型的文件。
到目前为止有两个(可能是次优的)想法:
要么我们让用户指定文件名和类型。但是,对于文件名更改的任何重构都不合适。
另一种解决方案是手动读取每个.cs文件并解析public class <classname>
并将其映射到每种类型。这似乎是一个巨大的开销,并不确定它是否是一种可行的方法。
这是我唯一的两个想法,但没有具体的。建议?
答案 0 :(得分:2)
将XML内存的生成与将其持久保存到磁盘分开。
保存从完全限定类名到哈希的字典。在第一次运行时,字典将以空白开始。
当需要确保类的相应XML在磁盘上是最新的时,在内存中生成XML,哈希,并检查字典中的哈希值。如果类的名称不在字典中,或者其散列与字典中的散列不一致,则保留生成的XML并使用新散列更新字典。
在您使用所有类型完成此过程后,您将拥有一个完整的哈希字典。将其保留到磁盘并在下次运行此程序时加载它。