C# 内存泄漏-任何猜测它可能在哪里

C# 内存泄漏-任何猜测它可能在哪里,c#,wcf,nhibernate,automapper-2,C#,Wcf,Nhibernate,Automapper 2,我正在处理.Net项目(windows服务),发现内存泄漏。使用ANTS内存探查器,我已经确定-根本原因在非托管内存范围内。但是我不使用任何COM/COM+或p/invoke-pure.Net(DataAcces-Fluent-nHibernate、Automapper、WCF) 假设,什么是原因?我怎样才能找到瓶颈。。我对任何一种经历都感兴趣,谁曾面对并解决过这样的问题 更详细一点: 我知道物品是如何处理的(并且正确处理) 我(几乎)不使用事件 我在用计时器 我使用多线程(但它相当并行) 我

我正在处理.Net项目(windows服务),发现内存泄漏。使用ANTS内存探查器,我已经确定-根本原因在非托管内存范围内。但是我不使用任何COM/COM+或p/invoke-pure.Net(DataAcces-Fluent-nHibernate、Automapper、WCF)

假设,什么是原因?我怎样才能找到瓶颈。。我对任何一种经历都感兴趣,谁曾面对并解决过这样的问题

更详细一点:

  • 我知道物品是如何处理的(并且正确处理)
  • 我(几乎)不使用事件
  • 我在用计时器
  • 我使用多线程(但它相当并行)
  • 我的应用程序不是无状态的——我正在跟踪对象的生命周期
关于内存泄漏 一般来说,.net中仍然可能存在内存泄漏。(某种程度上,并非所有这些本身都是教科书内存泄漏)例如,在第2代垃圾收集中遇到问题,或者在不处理从IDisposable继承的对象时,或者在处理流、事件时,SQL连接保持打开状态,并扰乱您的连接池。虽然我不是这方面的专家,但我将为您指出一些可能有助于您完成任务的地方

当你在摸索垃圾收集的工作方式时,你会发现垃圾收集在这方面有很大的帮助。从一个大致的心理图片开始,看看.NET背后的魔法到底是怎么回事

关于COM的东西 在.NET中,有许多东西只是com和/或win32包装器在幕后调用PInvoke。如果你想要的是让内部变得肮脏,那么我建议你看看反编译程序(比如IL Spy),在那里你会怀疑泄漏的代码

请查看此内容,以便对所有与包装器相关的内容进行更深入的讨论

我不知道C#会导致内存泄漏。这不全是垃圾收集吗?您使用的是不安全的代码吗?@dotTutorials GC仅此而已,但是,是的,您可以创建内存泄漏。您可以肯定,Microsoft在这方面的消息传递对于教育开发人员来说是不好的。您应该使用内存探查器。@meziantou-就像ANTS提供的一样?