如果对象实际上不会用于代码中,我应该使用using语句/ dispose吗?
问题描述:
我在一些的WinForms代码的工作,现在,我所遇到的线条像这几次:如果对象实际上不会用于代码中,我应该使用using语句/ dispose吗?
...
System.Diagnostics.Process.Start(someFileName);
...
...刚刚揭开序幕的一些过程中的客户机上,而完全忘记了这件事。 Process.Start(someFileName)
返回一个Process
类型的对象,它实现了IDisposable
,但代码没有对该对象做任何事情,因为整个想法只是触发该流程并忘记它。
在这种情况下,Process
对象是否应该丢弃,如果我们没有把它放在内存中呢?喜欢的东西:
using (System.Diagnostics.Process.Start(someFileName) { }
或
var process = System.Diagnostics.Process.Start(someFileName);
process.Dispose();
答
Process
对象持有非托管资源(S)(HProcess
手柄)
public class Process : Component {
//
// FIELDS
//
bool haveProcessId;
int processId;
bool haveProcessHandle;
SafeProcessHandle m_processHandle; // <- This should be disposed
bool isRemoteMachine;
string machineName;
ProcessInfo processInfo;
Int32 m_processAccess;
...
并由此应该配置为。使用局部变量(var process = ...
)看起来在上下文超调,这就是为什么我建议
System.Diagnostics.Process.Start(someFileName).Close();
'System.Diagnostics.Process.Start(someFileName).Close();' –
如果实现IDisposable然后清除它,使用一个(){}是执行此操作的规范方法。 –
简短的回答是:你应该处置。不管你使用哪两种代码变体(假设你不把代码放入使用块) –