VB.Net程序设计:Excel开发释放资源问题(非杀死Excel进程)
2014-01-08 18:58
633 查看
很久很久以前就遇到过这个问题。也找到了解决的方法,就是忘记代码是怎么写的,在哪里。
最近也遇到过。只能通过搜索代码,看看代码是怎么写的。
印象中,解决的方法是有掉用System.GC.Collect(),还有说调用这个要和包含有Excel对象的函数分开。
庆幸的是代码里面有记录下方法的来源是:http://bbs.csdn.net/topics/70360199
下面是自己调用的代码:
而新项目的代码是在一个多线程中调用Excel的,释放方法采用下面方法,仍然无效。仍然需要测试
--------------------------------
来源记录:
1.设置权限
在 开始->运行 中输入dcomcnfg 回车 会弹出 分布式COM配置属性 窗口
在 应用程序中选择 Microsoft Excel 然后点击属性
在 常规--身份验证级别 中选 无
在 安全性 中选择 使用自定义访问权限, 点编集 ,加入用户asp.net
在 身份标识 中选择交互式用户
点击确定返回
2.使用垃圾回收
GC.Collect();
GC.WaitForPendingFinalizers();
注意:这两个语句不能和excel对象在同一函数中
可以这样写:
private void useExcel()
{
....使用excel;
}
private void Button2_Click(object sender, System.EventArgs e)
{
useExcel();
GC.Collect();
GC.WaitForPendingFinalizers();
}
忘说了,程序中,如果象上面说的那样做的话
下面释放com的语句根本不需要了
System.Runtime.InteropServices.Marshal.ReleaseComObject(UsedRange);
垃圾回收会释放所有资源
最近也遇到过。只能通过搜索代码,看看代码是怎么写的。
印象中,解决的方法是有掉用System.GC.Collect(),还有说调用这个要和包含有Excel对象的函数分开。
庆幸的是代码里面有记录下方法的来源是:http://bbs.csdn.net/topics/70360199
下面是自己调用的代码:
Private Sub BtnWrite2File_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnWrite2File.Click ‘... Select Case Path.GetExtension(My.Settings.strWriteFilePath).ToLower Case ".txt" Write2Text() Case ".xls" '參考http://topic.csdn.net/t/20050531/16/4049025.html 18樓 Write2Excel() '否則無法釋放excel資源。 System.GC.Collect() System.GC.WaitForPendingFinalizers() Case ".xml" Write2Xml() End Select End Sub
而新项目的代码是在一个多线程中调用Excel的,释放方法采用下面方法,仍然无效。仍然需要测试
Dim th As New Threading.Thread(AddressOf Me.ExportDgv2ExcelFile) th.IsBackground = True th.Start() Private Sub ExportDgv2ExcelFile() '创建xlApp程序 releaseObject(xlApp) End Sub Private Sub releaseObject(ByVal obj As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) obj = Nothing Catch ex As Exception obj = Nothing Finally GC.Collect() End Try End Sub
--------------------------------
来源记录:
1.设置权限
在 开始->运行 中输入dcomcnfg 回车 会弹出 分布式COM配置属性 窗口
在 应用程序中选择 Microsoft Excel 然后点击属性
在 常规--身份验证级别 中选 无
在 安全性 中选择 使用自定义访问权限, 点编集 ,加入用户asp.net
在 身份标识 中选择交互式用户
点击确定返回
2.使用垃圾回收
GC.Collect();
GC.WaitForPendingFinalizers();
注意:这两个语句不能和excel对象在同一函数中
可以这样写:
private void useExcel()
{
....使用excel;
}
private void Button2_Click(object sender, System.EventArgs e)
{
useExcel();
GC.Collect();
GC.WaitForPendingFinalizers();
}
忘说了,程序中,如果象上面说的那样做的话
下面释放com的语句根本不需要了
System.Runtime.InteropServices.Marshal.ReleaseComObject(UsedRange);
垃圾回收会释放所有资源
相关文章推荐
- Silverlight 操作Excel 中的进程资源释放问题
- Silverlight 操作Excel 中的进程资源释放问题(续)
- Linux下调用fork或system启动子进程的信号和资源释放相关问题
- 释放内存对象和杀死进程 C# Excel
- eclipse插件开发中资源释放问题
- Linux下调用fork或system启动子进程的信号和资源释放相关问题
- Linux下调用fork或system启动子进程的信号和资源释放相关问题
- Linux下调用fork或system启动子进程的信号和资源释放相关问题
- 使用DCOM组件服务操作Excel,权限问题,进程释放问题
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- 释放内存对象和杀死进程 C# Excel
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- 调用Excel导出文件的两种方式,主要解决了资源释放的问题。
- Android Camera 开发出现的资源释放问题
- [转载]修复IE8进程延迟关闭的问题 充分释放资源
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- 完全释放Excel进程的资源
- C# 导入excel数据,解决关闭excel后不能释放资源的问题
- Com Excel组件释放资源关闭进程总结