【发布时间】:2017-10-02 18:04:25
【问题描述】:
这是我的代码。运行时间会增加内存使用量,直到由于此错误而停止:
由于 StackOverFlowException 导致进程终止
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace KillWW
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting... {0} ", DateTime.Now);
killWinword();
// Console.Read();
}
private static void killWinword()
{
var procs = Process.GetProcesses();
foreach (var proc in procs)
{
if (proc.ProcessName == "WINWORD")
{
TimeSpan runtime;
runtime = DateTime.Now - proc.StartTime;
if (DateTime.Now > proc.StartTime.AddSeconds(20))
{
proc.Kill();
}
}
}
Thread.Sleep(1000);
killWinword();
}
}
}
谁能解释它的原因是什么?请帮我。谢谢。
【问题讨论】:
-
你有一个没有停止条件的递归调用。所以这是一个无限递归。这将最终出现在 Stackoverflow 中。看来您想每秒进行一次检查。您可以使用计时器来执行此操作。
-
在
for-loop中调用killWinword();有什么用?只需删除该语句 -
@SouvikGhosh 它不在 for 里面。
-
here 是使用 async/await 任务的解决方案。
-
@SouvikGhosh 我猜他试图让它每秒重复检查。他似乎没有意识到递归的副作用......
标签: c#