【问题标题】:Using Process.Start in chain hangs my computer在链中使用 Process.Start 会挂起我的电脑
【发布时间】:2011-02-07 23:12:06
【问题描述】:

我有一个奇怪的问题,我创建了控制台应用程序 App1,这个应用程序的唯一目的是获取参数 (val) 检查这个值是否大于零,如果是,然后使用 val--in 参数运行同一个应用程序 (App1)并关闭。

我从计划任务运行这个应用程序,我每隔一分钟运行一次。问题是,当我以 1000 作为参数运行此应用程序时,它会在两三分钟后挂起我的计算机(蓝屏)。对于像 10 这样的论点,一切正常。

我需要这个应用程序来测试不同机器上的内存管理问题。

我运行了以下代码:

static void Main( string[] args )
{
 if ( args.Length > 0 )
 {
  int val = 0;
  try
  {
   Int32.TryParse( args[ 0 ], out val );
  }
  catch ( Exception ex )
  { }
  if ( val > 0 )
  {
   val--;
   ProcessStartInfo psi = new ProcessStartInfo(System.Windows.Forms.Application.ExecutablePath, val.ToString() );
   psi.CreateNoWindow = true;
   psi.WindowStyle = ProcessWindowStyle.Hidden;
   Process.Start( psi );
  }
  System.Console.WriteLine( args[ 0 ] );
 }
 System.Console.WriteLine( "App" );
}

【问题讨论】:

  • 尝试启动 1000 个进程(你的代码正在做什么)充其量会很慢。请评论您的期望,因为目前还不清楚什么不能按您想要的方式工作。
  • 这是我的代码,仅此而已,我只想运行运行应用程序的应用程序,等等。当应用程序运行应用程序时,它应该退出。所以我得到了应用链。我在我的电脑上运行它并得到几次蓝屏,我想知道为什么。我查看了内存使用情况,没关系,处理器利用率为 100%,但事实并非如此。
  • 为什么要启动 1000 个进程才能一无所获?这个应用程序应该做什么?此外,告诉我们您遇到“蓝屏”并不能提供太多信息 - 有数百种可能的蓝屏,告诉我们报告的实际错误代码会很有帮助。
  • 我需要在另一台机器上测试内存问题。我注意到,当我退出.net 应用程序时,系统内存的某些部分总是丢失(使用的内存量正在增加),所以在工作几个小时后就没有可用的内存了。我想创建一个非常简单的应用程序并运行它几次,并检查这个问题是否发生在更简单的情况下。然后我在我的机器上运行它进行测试,偶然发现了描述的问题。我问是因为也许我忘了发布一些明显的东西,或者可能是 process.start 的一些普遍问题。
  • 我试图从蓝屏获取错误消息,但它快速闪烁(奇怪,因为我已将窗口配置为在这种情况下等待我的操作)

标签: c#


【解决方案1】:

您究竟是如何确定可用内存量的?您是否正在查看 Windows 任务管理器中“物理内存”框中的“免费”部分?

   

如果是这样,请停止这样做。 现在在我的机器上,该数字表示我有 6 MB 可用空间。由于我总共有 5 GB 的 RAM,并且只运行了几个 Chrome 和 VS 2010 实例,我严重怀疑我已经消耗了所有可用的 RAM。

事实上,您不应该永远任务管理器进行内存分析。这回答了both of your most recent questions。绝对没有内存泄漏,您不需要进行这种愚蠢的回归测试。

【讨论】:

  • 我看内存图。这很奇怪,因为随着时间的推移,我的服务器性能几乎没有下降,而且我相信这是内存消耗的结果,当我不运行这个 .net 应用程序时,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2011-04-14
相关资源
最近更新 更多