如果对象实际上不会在代码中使用,我应该使用using语句/ dispose吗?

时间:2017-08-14 15:27:26

标签: c# .net process idisposable

我现在正在使用一些Winforms代码,我多次遇到这样的行:

---
- name: Including Variables
  include_vars:
    file: Linux.yml

- name: Gathering EC2 Facts
  ec2_remote_facts:
    aws_access_key: "{{ access_key }}"
    aws_secret_key: "{{ secret_key }}"
    region: us-east-1
    filters:
        "tag:Name": "{{ ansible_hostname }}"
  register: instanceId
- debug: var=instanceId.instances.id

...它只是在客户端计算机上启动一些进程,并完全忘记了它。 ... System.Diagnostics.Process.Start(someFileName); ... 返回一个Process.Start(someFileName)类型对象,它实现了Process,但代码没有对该对象做任何事情,因为整个想法只是触发进程而忘记它。 / p>

在这种情况下,如果IDisposable对象仍然处理掉,如果我们根本没有将它保留在内存中那么?类似的东西:

Process

using (System.Diagnostics.Process.Start(someFileName) { }

1 个答案:

答案 0 :(得分:0)

Clien Name Acct # Count Count Max XYZ LTD. 1234 4 6 XYZ LTD. 4565 6 6 XYZ LTD. 4565 6 6 XYZ LTD. 4565 6 6 XYZ LTD. 4565 6 6 XYZ LTD. 1234 4 6 XYZ LTD. 1234 4 6 XYZ LTD. 4565 6 6 XYZ LTD. 1234 4 6 XYZ LTD. 4565 6 6 XYZ LTD. 7898 6 6 XYZ LTD. 7898 6 6 XYZ LTD. 7898 6 6 XYZ LTD. 7898 6 6 XYZ LTD. 7898 6 6 XYZ LTD. 7898 6 6 个对象包含非托管资源Process句柄)

https://referencesource.microsoft.com/#System/services/monitoring/system/diagnosticts/Process.cs,f8b2e604d6f1fe04

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 = ...