C# 服务器正在泄漏内存;但这个过程看起来不错

C# 服务器正在泄漏内存;但这个过程看起来不错,c#,wcf,memory-leaks,C#,Wcf,Memory Leaks,我编写了一个WCF(c#)Windows服务应用程序,在我看来,Windows服务正在泄漏内存。 根据Windows,从Windows服务开始到屏幕截图时(30小时后),内存压力从24 Gb上升到44 Gb) 我们有两个问题 我们尝试使用ANTS Memory Profiler模拟泄漏,我们 找不到问题 WCF服务本身没有泄漏内存。内存使用量为18 Gb (这与从启动时的记忆压力相同 服务) 我如何调查这个问题?是什么导致了这种高内存压力 在我们看来,这是预期的行为。我们从未将这种行为视为发展

我编写了一个
WCF(c#)Windows服务应用程序
,在我看来,Windows服务正在泄漏内存。 根据Windows,从Windows服务开始到屏幕截图时(
30小时后),内存压力从
24 Gb
上升到
44 Gb

我们有两个问题

  • 我们尝试使用ANTS Memory Profiler模拟泄漏,我们 找不到问题
  • WCF服务本身没有泄漏内存。内存使用量为
    18 Gb
    (这与从启动时的记忆压力相同 服务)
  • 我如何调查这个问题?是什么导致了这种高内存压力


    在我们看来,这是预期的行为。我们从未将这种行为视为发展 机器的可用内存较少。仅当92%-95%的内存被占用时 “已占用”强制进行垃圾回收

    我们研究这个问题的原因是因为进程在一段时间后运行得更慢

    有趣的是:

    把这本书放在我的书架上:


    谢谢大家,

    “WCF服务本身并没有泄漏内存。”但显然是这样。你说这话是什么意思?你能拍一张堆快照看看有什么吗?嗨,usr,根据Windows的说法,内存压力从Windows服务开始时的24 Gb增加到屏幕截图时的44 Gb(30小时后)。由于服务器仅运行我的WCF服务,因此只能由此应用程序引起。您可以从服务器获取内存转储并“脱机”分析它,而不是再现此问题,即在SciTech memory profiler中进行分析。ANTS afaik不支持加载内存转储。就个人而言,我会开始删除代码,直到它停止丢失内存。有三种可能性;a) WCF中有一个bug,b)您正在设法保留指向应该但不能被垃圾收集的对象的链接,c)您正在创建非托管内存(例如通过封送)而不是取消分配它。我在这方面也遇到了问题。我的问题终于解决了。最大的问题是,我有一个共享的数据对象引用,该引用是从宿主exe传递到WCF服务的。一旦我摆脱了它,我的大部分记忆问题就消失了。我还做了另一件事,就是让我服务的所有物品都是一次性的。这也有帮助。