laball
V2EX  ›  .NET

.net 非托管内存问题

  •  
  •   laball · May 11, 2020 · 3603 views
    This topic created in 2218 days ago, the information mentioned may be changed or developed.

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

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

    https://www.coderbusy.com/archives/286.html
    forgottencoast
        9
    forgottencoast  
       May 14, 2020
    @laball 用工具可以查看内存中存在的大对象,或者你也可以先用性能计数器看看统计数据。
    laball
        10
    laball  
    OP
       May 15, 2020
    @forgottencoast 已经用 WinDBG 看过了,托管内存 1G 左右,非托管内存 7G+,着实是非托管内存泄漏;
    laball
        11
    laball  
    OP
       May 15, 2020
    @Soar360 Hold 不住,DMP 8G+,太大了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1388 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:56 · PVG 00:56 · LAX 09:56 · JFK 12:56
    ♥ Do have faith in what you're doing.