保证COM对象发布?
我在假设Excel将与Monkey一起消亡的情况下编写了以下代码:保证COM对象发布?,com,c#-4.0,Com,C# 4.0,我在假设Excel将与Monkey一起消亡的情况下编写了以下代码: class ExcelMonkey { private static Excel.Application xl = new Excel.Application(); public static bool parse(string filename) { if (filename.Contains("foo")) { var workbook =
class ExcelMonkey
{
private static Excel.Application xl = new Excel.Application();
public static bool parse(string filename)
{
if (filename.Contains("foo"))
{
var workbook = xl.Workbooks.Open(filename);
var sheet = workbook.Worksheets.get_Item(1);
// do stuff
return true;
}
return false;
}
}
我怎样才能确保它是真的?我是否需要分别发布工作簿
和工作表
我希望在程序的整个生命周期中都有Excel,这是一个巨大的性能改进
我需要单独发布工作簿和工作表吗
是,两者都将使基础Excel应用程序对象保持活动状态
我怎样才能确保它是真的
将执行此操作,但请确保在此之后不使用对对象的引用
我需要单独发布工作簿和工作表吗
是,两者都将使基础Excel应用程序对象保持活动状态
我怎样才能确保它是真的
将执行此操作,但请确保在此之后不使用对对象的引用。在析构函数调用中
xl.Quit() 在析构函数调用中
xl.Quit() 如果有人感兴趣,以下是可行的解决方案:
class ExcelMonkey
{
private Excel.Application xl = new Excel.Application();
~ExcelMonkey()
{
xl.Quit();
Dispose(false);
}
private bool isDisposed = false;
protected void Dispose(bool disposing)
{
Marshal.ReleaseComObject(xl);
isDisposed = true;
}
public bool parse(string filename)
{
if (filename.Contains("foo"))
{
var workbook = xl.Workbooks.Open(filename);
var sheet = workbook.Worksheets.get_Item(1);
try
{
// do stuff
}
finally
{
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(workbook);
}
return true;
}
return false;
}
}
如果有人感兴趣,以下是可行的解决方案:
class ExcelMonkey
{
private Excel.Application xl = new Excel.Application();
~ExcelMonkey()
{
xl.Quit();
Dispose(false);
}
private bool isDisposed = false;
protected void Dispose(bool disposing)
{
Marshal.ReleaseComObject(xl);
isDisposed = true;
}
public bool parse(string filename)
{
if (filename.Contains("foo"))
{
var workbook = xl.Workbooks.Open(filename);
var sheet = workbook.Worksheets.get_Item(1);
try
{
// do stuff
}
finally
{
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(workbook);
}
return true;
}
return false;
}
}
作为一种背景,Excel倾向于在后台生成隐藏的引用,作为用于支持VBA的COM默认机制的一种功能。例如,您可以与“应用程序”对话,它会悄悄地设置一个您无法分离的COM引用 在编写Excel时,您仍然必须非常仔细地处理COM引用
事实上,PIA也喜欢在幕后生成引用,而当垃圾被收集时,他们不会正确地整理这些引用,这使得情况更加复杂。您必须显式关闭任何COM引用。作为背景,Excel倾向于在后台生成隐藏引用,这是用于支持VBA的COM默认机制的一个功能。例如,您可以与“应用程序”对话,它会悄悄地设置一个您无法分离的COM引用 在编写Excel时,您仍然必须非常仔细地处理COM引用
事实上,PIA也喜欢在幕后生成引用,而当垃圾被收集时,他们不会正确地整理这些引用,这使得情况更加复杂。您必须明确关闭任何COM引用。如果要使用office文件,建议您查看。这是用于java的POI库的一个点网络端口,它在处理office文件时会出现漂移。不需要凌乱的COM,全部用CLR代码完成,一切正常
我已经使用它生成excel报告,没有任何问题。试试看,我相信你不会后悔的。如果您想使用office文件,我建议您查看一下。这是用于java的POI库的一个点网络端口,它在处理office文件时会出现漂移。不需要凌乱的COM,全部用CLR代码完成,一切正常
我已经使用它生成excel报告,没有任何问题。试试看,我相信你不会后悔的。这实际上是一个复制品,比使用COM要好得多。看,这实际上是一个复制品。看见