|
|
1
5
建议不要将清理代码放入终结器中,因为与C++中的析构函数不同,它不是确定性的。它可能在对象超出范围后不久调用。可能需要一个小时。它可能永远不会被召唤。通常,如果要释放非托管对象,应使用IDisposable模式,而不是终结器。 这个 solution 通过显式调用垃圾回收器并等待终结器完成,链接到解决该问题的尝试。这在一般情况下是不推荐的,但对于这种特殊情况,有些人认为它是一个可接受的解决方案,因为很难跟踪所有被创建的临时非托管对象。但是明确的清理是正确的方法。然而,考虑到这样做的困难,这种“黑客”可能是可以接受的。请注意,这个解决方案可能比您提出的想法要好。 如果您希望尝试显式地清理,则“不要将两个点与COM对象一起使用”准则将帮助您记住保留对所创建的每个对象的引用,以便在完成后清理这些对象。 |
|
|
2
2
我们使用了在msdn杂志中描述的LifeTimeScope类。使用它可以正确地清理对象,并对我们的Excel导出非常有效。代码可以在这里下载,还包含杂志文章: http://lifetimescope.codeplex.com/SourceControl/changeset/changes/1266 |
|
|
3
1
看看我的项目 MS Office for .NET . 通过原生vb.net后期绑定功能解决了referencich包装器对象和原生对象的问题。 |
|
|
4
0
我要做什么:
用例。请注意调用quit,这似乎是使进程结束所必需的:
|
|
|
5
0
为了它的价值, Excel Refresh Service on codeplex 使用此逻辑:
|