【问题标题】:C# Console Application still resident in memory after exit退出后 C# 控制台应用程序仍驻留在内存中
【发布时间】:2008-10-16 16:23:24
【问题描述】:

我有一个 .net C# 控制台应用程序(不是服务)。它基本上连接到一个 web 服务,获取一些 xml 文件,将这些文件复制到驱动器上的几个位置,验证 xml,处理它并将这些对象发送到另一个 web 服务。

但是,当 main 方法存在(并且控制台窗口关闭)时,我仍然可以在任务管理器中看到该进程。

我尝试将 main 方法中的所有内容都包围起来,以捕获 ApplicationException,但我仍然不知道为什么应用程序崩溃了,即使一切正常运行...

有人知道从哪里开始检查有缺陷的部分吗?

【问题讨论】:

  • 你确定内存中的应用程序不是YourExe.vshost.exe? :)
  • 哈哈,那会很有趣:)
  • 没那么好笑。事情对每个人来说总是新鲜的一次,在这个网站上询问这是一件非常值得尊敬的事情。

标签: c# .net console-application


【解决方案1】:

查看线程使用情况和异步调用。

【讨论】:

  • 这就是问题所在...我忽略了对 Web 服务连接的异步调用...谢谢。
【解决方案2】:

如果控制台窗口已关闭,那么进程仍在运行似乎确实很奇怪。您可以在 Visual Studio 调试器中附加到它吗? (显然是调试版本。)

您确定它不是仍在执行的先前运行吗?

【讨论】:

    【解决方案3】:

    如果您正在调试应用程序,那么我已经看到 Visual Studio 创建一个名称与您的应用程序类似的主机 exe 并以 .vshost.exe 结尾的情况。它使用该控制您的应用程序以获得更好的调试体验。在您完成程序调试后,该主机 exe 将继续存在,以便它等待并准备好,以便它可以快速启动新的调试会话。

    你确定不是这个 exe 挂着吗?

    如果你在没有调试的情况下运行你的应用程序,那么它仍然会挂起吗?

    【讨论】:

      【解决方案4】:

      几乎可以肯定,您的应用程序中有一个未终止的线程。正如乔恩所说,附加调试器并查看哪些线程是活动的。

      【讨论】:

        【解决方案5】:

        正如所有其他答案所暗示的那样,您可能确实有一个挥之不去的线程,但不一定是您明确创建的,您可能需要在一个或多个对象上调用 Dispose 或类似的东西

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          • 1970-01-01
          相关资源
          最近更新 更多