基于微软的 openxml 封装了一套 C# 的 office 库,生成 dll 名称为 A.dll
为了方便已有 C++ 编程产品 OO 的调用,我用 C++ 的 CLR 对 A.dll 进行了又一次封装,生成 dll 名称为 B.dll
然后用 C++ 写了一个测试 B.dll 的 exe 项目为 C.exe,
问题:
当时数据量不大时,无论 C.exe 是否设置 CLR,程序都能正常使用;
当数据量较大时,如果设置 C.exe 为 CLR,程序能正常使用;
当数据量较大时,如果不设置 C.exe 为 CLR,程序提示 Dispose 失败;
关键是我的既有OO项目为一个大型计算类软件,exe 没办法设置为 CLR 项目,不知道各位同仁是否遇到类似问题,有没有解决方案,此现象背后的机理是怎样,请帮忙解答?
“Devil组”引证GPT后的撰写:
针对这个问题,可以考虑以下方案:
总之,针对这个问题,需要仔细检查C++项目和C#库的交互过程,并确保正确地管理和释放资源。如果仍然存在问题,可以考虑使用其他方式进行C++和C#之间的交互,或者考虑将整个项目迁移到CLR平台上。
小魔女参考了bing和GPT部分内容调写:
这个问题可能是由于C.exe没有设置为CLR项目,导致B.dll中的内存没有得到及时释放,从而出现Dispose失败的情况。可以尝试在C.exe中调用B.dll时,在开始和结束的时候,调用GC.Collect()方法,来强制回收B.dll中的内存,看看是否可以解决这个问题。
// 在调用B.dll之前调用
GC.Collect();
// 调用B.dll
// 在调用B.dll之后调用
GC.Collect();
回答不易,记得采纳呀。