加载dll时出现unloaded问题~

.Net技术 码拜 8年前 (2016-02-22) 4145次浏览
本人在监控程序中静态加载dll,dll是用c++写的,这个dll又调用了别的dll中的功能,即本人在本人的代码中加载A.dll,通过A中的函数实现功能,但A在实现该功能时又调用了B.dll中的代码。现在的问题是每次刚运行都能正常执行,可是执行一些时间后,程序报错并关闭,查看事件日志,发现有以下错误提示:
错误应用程序名称: XXXt.exe,版本: 1.0.0.0,时间戳: 0x535476e7
错误模块名称: B.dll_unloaded,版本: 0.0.0.0,时间戳: 0x513d4625
异常代码: 0xc0000005
错误偏移量: 0x0e6b18de
错误进程 ID: 0x22dc
错误应用程序启动时间: 0x01cf5d254d325722
错误应用程序路径: ……
错误模块路径: B.dll
报告 ID: 8a251be5-c91d-11e3-93a9-005056c00008
原因是A.dll和B.dll都是第三方提供的~ 无法修改~ 问一下有没有办法解决该问题,保证监控持续进行
解决方案

5

在要报错的时候做 刷新处理

5

一开始能正常运行、过段时间报错、一般都是内存泄漏了、
你可以看看是不是这个问题、假如是那就看看哪里会导致内存泄漏

5

引用 5 楼 chentank 的回复:
Quote: 引用 4 楼 C_htp 的回复:

一开始能正常运行、过段时间报错、一般都是内存泄漏了、
你可以看看是不是这个问题、假如是那就看看哪里会导致内存泄漏

原因是使用的是第三方的dll,主要就是完成这样的过程:连接设备->打开->播放->截图->停止播放器->关闭->释放;
现的即使是有内存泄漏的问题也没办法去修改dll的代码,所以本人想能不能有办法能捕捉到dll的异常,然后重新加载dll,这样来保持系统的正常服务。

你要把问题的根源找出来啊、别人的dll有没有测试过的?你用dllimport调用别人的dll的时候会不会导致内存泄漏等等
就算你要捕捉异常、也要从dll那块入手啊

25

引用 7 楼 chentank 的回复:
Quote: 引用 6 楼 C_htp 的回复:
Quote: 引用 5 楼 chentank 的回复:
Quote: 引用 4 楼 C_htp 的回复:

一开始能正常运行、过段时间报错、一般都是内存泄漏了、
你可以看看是不是这个问题、假如是那就看看哪里会导致内存泄漏

原因是使用的是第三方的dll,主要就是完成这样的过程:连接设备->打开->播放->截图->停止播放器->关闭->释放;
现的即使是有内存泄漏的问题也没办法去修改dll的代码,所以本人想能不能有办法能捕捉到dll的异常,然后重新加载dll,这样来保持系统的正常服务。

你要把问题的根源找出来啊、别人的dll有没有测试过的?你用dllimport调用别人的dll的时候会不会导致内存泄漏等等
就算你要捕捉异常、也要从dll那块入手啊

本人用内存泄漏查找工具发现调用了A.dll的这个类一直被创建新的实例,而没有被成功的disposed和释放,本人在这个类中使用了两个代理作为回调,其中有一个回调是作为参数传递给A.dll中的方法的,是不是和这个有关?

为什么一直创建新的实例、这就需要你在代码上做修改了
new出来的实例没有被释放、说明这个实例在别的地方有代码一直对它持有引用、
你可以在没有使用这个实例的地方gc.collect一下看内存会不会降下来
这种问题别人没办法帮你、只能给你思路


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明加载dll时出现unloaded问题~
喜欢 (0)
[1034331897@qq.com]
分享 (0)