.net 非托管内存问题

2020-05-11 10:31:49 +08:00
 laball

有没有人遇到过.net 非托管内存泄漏问题,想探讨一下。

2782 次点击
所在节点    .NET
11 条回复
skinny
2020-05-11 10:53:34 +08:00
要么是你自己的问题,要么是你用的库的问题,善用 IDisposable 接口和 using
Soar360
2020-05-11 11:26:06 +08:00
有一个工具叫 dotMemory,不会 sos 的话可以尝试下。
wanguorui123
2020-05-11 13:36:37 +08:00
没手动释放?
jiumingzhu
2020-05-11 17:06:43 +08:00
莫非用了别人的 dll,然后那个人没有释放?
yulitian888
2020-05-11 18:54:54 +08:00
非托管内存,泄露?
我遇到过一个情况刚刚好相反,非托管也会被 GC 胡乱回收,链接: https://www.v2ex.com/t/575061
非托管泄露我遇到过一次,是很多来年前做 WPF 的时候。因为 WPF 调用了 Dx9 的 COM 资源,老大难问题,无解。直到等了 N 年之后微软才给修复。
laball
2020-05-13 00:46:07 +08:00
@Soar360 我用 windbg 分析过,托管内存不到 1G 多,非托管内存 7G 多,差距太大,已经很明显是非托管内存泄漏了。
laball
2020-05-13 00:47:21 +08:00
@jiumingzhu 使用了 OpenPop,Lumisoft.Net 这两个库,都是以源代码形式,有做部分修改,主要功能是收取邮箱中的邮件;
Soar360
2020-05-13 09:03:09 +08:00
非托管内存泄露,以我的经验是发生在跨语言调用过程中,非托管申请的内存没有被 free 造成的。
可以参看下↓

https://www.coderbusy.com/archives/286.html
forgottencoast
2020-05-14 11:31:29 +08:00
@laball 用工具可以查看内存中存在的大对象,或者你也可以先用性能计数器看看统计数据。
laball
2020-05-15 00:20:05 +08:00
@forgottencoast 已经用 WinDBG 看过了,托管内存 1G 左右,非托管内存 7G+,着实是非托管内存泄漏;
laball
2020-05-15 00:20:46 +08:00
@Soar360 Hold 不住,DMP 8G+,太大了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670444

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX