VC++操作EXCEL内存泄露问题
2014-12-12 15:57
295 查看
一般VC++操作EXCEL的操作步骤我就不写了,度娘一下一大堆。
好久以前写在博客里面的一篇草稿,现在博客开张了,一并放出来吧。
2014年11月为了EXCEL的“切换到、重试、取消”问题前前后后改了三天吧。除了网上搜出来的添加以下几句话来屏蔽该对话框外。
COleMessageFilter* pMsgFilter= AfxOleGetMessageFilter();
if (pMsgFilter)
{
pMsgFilter->EnableBusyDialog(FALSE);
pMsgFilter->SetBusyReply(SERVERCALL_RETRYLATER);
pMsgFilter->EnableNotRespondingDialog(TRUE);
pMsgFilter->SetMessagePendingDelay(-1);
}
更加本质的问题在于操作EXCEL时内存释放的问题。
以下是本次的经验:
1、 不管是Range、RangeCell、Application、WorkSheet等何种类型的变量,Attach后就要记得Release。
2、 万万不可以如此用法。此用法中GetItem循环20000次内存增长30M。
Range range;
_variant_t var;
range.AttachDispatch(usedRange.GetCells());
var = range.GetItem(_variant_t(ii),_variant_t(jj));
range.ReleaseDispatch();
正确的用法如下。
Range range;
Range rangeCell;
_variant_t var;
range.AttachDispatch(usedRange.GetCells());
rangeCell.AttachDispatch(range.GetItem(COleVariant((long)ii),COleVariant((long)jj)).pdispVal);
var = rangeCell.GetValue2();
rangeCell.ReleaseDispatch();
range.ReleaseDispatch();
好久以前写在博客里面的一篇草稿,现在博客开张了,一并放出来吧。
2014年11月为了EXCEL的“切换到、重试、取消”问题前前后后改了三天吧。除了网上搜出来的添加以下几句话来屏蔽该对话框外。
COleMessageFilter* pMsgFilter= AfxOleGetMessageFilter();
if (pMsgFilter)
{
pMsgFilter->EnableBusyDialog(FALSE);
pMsgFilter->SetBusyReply(SERVERCALL_RETRYLATER);
pMsgFilter->EnableNotRespondingDialog(TRUE);
pMsgFilter->SetMessagePendingDelay(-1);
}
更加本质的问题在于操作EXCEL时内存释放的问题。
以下是本次的经验:
1、 不管是Range、RangeCell、Application、WorkSheet等何种类型的变量,Attach后就要记得Release。
2、 万万不可以如此用法。此用法中GetItem循环20000次内存增长30M。
Range range;
_variant_t var;
range.AttachDispatch(usedRange.GetCells());
var = range.GetItem(_variant_t(ii),_variant_t(jj));
range.ReleaseDispatch();
正确的用法如下。
Range range;
Range rangeCell;
_variant_t var;
range.AttachDispatch(usedRange.GetCells());
rangeCell.AttachDispatch(range.GetItem(COleVariant((long)ii),COleVariant((long)jj)).pdispVal);
var = rangeCell.GetValue2();
rangeCell.ReleaseDispatch();
range.ReleaseDispatch();
相关文章推荐
- VC2010操作Excel时找不到成员问题
- 关于VC操作Excel无法退出进程的问题
- vc操作excel程序退出的问题
- VC操作Excel之基本操作 修改问题篇
- vc操作excel程序退出的问题
- 多线程 DLL 回调函数问题,当应用程序退出时,有些操作并未完成,造成程序内存泄露,如何解决呢
- VC 读取操作Excel问题
- 通过vc 操作excel时避免重复定义的问题
- java读取excel数据,导致内存泄露的问题
- Java内存泄露问题分析
- VC一些操作,编译的基础问题
- VC操作EXCEL(1)
- 在程序中操作excel的图表的问题
- 内存泄露问题分析
- Java内存泄露问题
- 有关于c#操作excel的问题 请各位大虾指教
- vc知识积累(2.操作Excel数据库)
- Java内存泄露问题分析
- 内存泄露的小问题(转载)
- VC程序调试技术,一些工具上和具体的问题,包括内存检测