【问题标题】:Loading new assembly when Serializing序列化时加载新程序集
【发布时间】:2009-02-18 09:15:03
【问题描述】:
我在 BackgroundWorker 中有一个循环,它在需要时通过 xml 序列化保存一些东西,但这似乎每次都加载一个新程序集
“xxyyzz.Main.vshost.exe”(托管):已加载“9skkbvdl”
“xxyyzz.Main.vshost.exe”(托管):已加载“d2k4bdda”
等等。为什么会这样?我能做些什么吗?这是我应该关心的事情吗?该程序将长时间运行而无需重新启动...
【问题讨论】:
标签:
c#
memory-management
assemblies
xml-serialization
【解决方案1】:
程序集是在您创建 XML 序列化程序时动态生成的 - 我不会太在意它,但如果您是,您可以为您的类型保存对序列化程序的引用,并在连续调用中使用它
【解决方案2】:
您是否将其他参数传递给您的 XmlSerializer?即使用非默认构造函数?是的,它会这样做(因为它每次都会构建一个新的序列化程序集)...考虑在类型初始化程序中创建序列化程序并将其缓存:
static readonly XmlSerializer foo;
static MyType() {
foo = new XmlSerializer(typeof(TypeToSerialize), additionalArgs);
}
然后重复使用缓存的foo 序列化器实例。