【问题标题】:My program Memory used 100% ! How can I know what uses so much memory? [closed]我的程序内存使用了 100% !我怎么知道是什么占用了这么多内存? [关闭]
【发布时间】:2013-06-28 07:42:01
【问题描述】:

我们有一个用 C# 编写的程序,用作服务器。这是一项 Windows 服务。这个程序经常使用机器的所有内存,但我不知道是什么原因造成的。我能做什么?

我的程序已经作为官方服务器使用了,我不能随便重启它,所以我不能使用任何工具,因为工具需要重启我的程序并且不能附加到进程。而且我不知道可能有害的代码,因为我的程序有很多代码。

【问题讨论】:

  • 您有应用程序的源代码吗?如果是这样,你明白它在做什么吗?
  • 展示你的作品并告诉人们你尝试了什么。
  • 听起来像是内存泄漏......它是否发生在应用程序的某个部分?您可以尝试根据您拥有的工具或运行任务管理器的非常基本的级别对其进行分析,并在某些操作期间观察内存使用情况,以查看是否可以看到内存泄漏出现的位置(即在服务的某个阶段)。
  • 使用像 .Net Memory Profiler 这样的内存分析器。 memprofiler.com
  • 向我们展示一些您认为可能导致此问题的代码。或者,如果您不知道是哪个部分导致了内存使用,那么就开始切块(注释掉大的部分),看看性能何时会提高

标签: c#


【解决方案1】:

有不同的工具可以帮助您调查此类问题。

最简单的方法是登录启动潜在有害代码并在此过程中。

如果你不知道,那代码可能是,你可以看看:

MemoryProfiler from JetBrains

或从 MS 中免费提供一个,例如:

MS Profiler,但使用起来不是那么直观。

【讨论】:

  • 是的,我已经尝试过了,但是,所有工具都无法附加到进程,必须重新启动程序。我想写日志,但 C# 无法获得线程的内存使用!
  • @user2538281:你确定 JetBrains 不能“连接到进程”吗?
  • 是的,我使用它,它只能在我用它启动我的程序时使用,不能附加到进程,不是吗?我使用 dotTrace Profiler 3.1
  • 看来你是对的, 附加过程,但为了性能而不是内存。您可以像普通应用程序(计时器??)一样运行您的网络服务并对其进行分析吗?
  • 我可以把它改成普通应用程序,但是有两个问题。1.我必须在官方环境中使用它,因为在我们的测试环境中我们无法重现这个,我们不知道是什么操作用户确实会导致这种情况。 2.如果我在官方环境中使用它,我不允许使用profile工具,也许profiler工具会导致性能不佳
【解决方案2】:

我建议你使用Ants memory profiler。我认为它虽然功能强大,但使用起来非常简单直观。它不是免费的,但如果您有内存问题,它是值得的。

【讨论】:

  • 可以附加到进程吗?
  • 据我所知,IIS 和独立的,您可以查看他们的网站以了解规格
猜你喜欢
  • 2015-05-13
  • 1970-01-01
  • 2012-08-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多