【发布时间】:2015-12-21 22:28:48
【问题描述】:
给定下面的代码,which was an accepted answer to another question.
以这种方式运行新进程是否安全,或者我应该管理对 MyProcess 的引用?
据我了解,GC 将(最终)处理不再具有引用的对象。随着 MyProcess 超出范围,当此引用最终被垃圾收集时,不会调用 Dispose() 方法吗? 我的印象是它可能会运行一段时间,直到 GC 进行收集。
void TestMethod()
{
Process MyProcess = new Process();
MyProcess.StartInfo = new ProcessStartInfo("app.exe");
MyProcess.StartInfo.WorkingDirectory = "";
MyProcess.StartInfo.Arguments = "some arguments";
MyProcess.Start();
}
【问题讨论】:
-
我假设对进程的引用,通过 MyProcess 将被垃圾收集。但是,进程本身仍将继续运行。
-
一个进程永远不会“超出范围”——一旦你启动一个进程,它就会运行(作为一个单独的进程)直到它结束或有人强行终止它。
Process实例可能超出范围,但这不是进程本身 - 它只是进程的描述符,可让您获取有关特定进程的信息。 -
但是不会调用Dispose()方法结束进程吗?
-
@Don 不,
Dispose删除了与内存中Process实例相关联的资源,而不是该实例描述的进程。 -
@Don 这样看:你的
Process实例独立于进程——你甚至在进程开始之前就创建了它。一旦启动,它就存在于一个单独的内存空间中。只要实例在范围内,Process实例就能够获取有关进程的更新信息 - 之后它会被清理但不会影响进程。
标签: c# .net garbage-collection