NI LabVIEW NetworkVariableManager 应该保持连接状态吗?

Should a NI LabVIEW NetworkVariableManager be left connected?

我从一位同事那里收到了一些 C# 代码,用于与通过以太网连接的 cRIO 设备进行交互。我正在努力提高代码质量,使其对未来的用户来说更容易理解,但是我正在努力从 API 文档中提取一些相关信息。我的主要问题是将 NetworkVariableManager 留在 Connected 状态是否会导致问题?

现在代码使用的 class 看起来像

public class RIOVar<T>
{
    public readonly string location;

    public RIOVar(string location)
    {
        this.location = location;
    }

    public T Get()
    {
        using(NetworkVariableReader<T> reader = new NetworkVariableReader<T>(location) )
        {
            reader.Connect();
            return reader.ReadData().GetValue()
        }
    }

    public void Write(T value)
    {
        using(NetworkVariableWriter<T> writer = new NetworkVariableWriter<T>(location) )
        {
            writer.Connect();
            writer.WriteValue(value);
        }
    }
}

实际class做的远不止这些,但是真正和cRIO通信的部分基本上归结为这两个方法和location数据成员。

我想知道的是,将 readerwriter 作为 class 成员并在构造函数中 Connect 它们是否会更好(在他们构建的点连接应该是可能的),但我不知道这是否会对计算机和 RIO 相互通信的方式产生一些不利影响(也许连接的管理器使用了一些资源或程序必须维护某种寄存器...?)因此这里让管理器连接 用于 read/write 操作的方法是更好的设计。

保持变量连接可将其后备资源保留在内存中:

  • 线程
  • 套接字
  • 数据缓冲区

这些资源列在 online help 中,但我不清楚该列表是否完整:

  • NationalInstruments.NetworkVariable uses multiple threads to implement the reading and writing infrastructure. When reading or writing in a tight loop insert a Sleep call, passing 0, to allow a context switch to occur thereby giving the network variable threads time to execute.
  • ... snip ...
  • NationalInstruments.NetworkVariable shares resources such as sockets and data buffers among connections that refer to the same network variable in the same program.

在我看来,我希望尽可能少地 connecting/disconnecting 获得更好的运行时性能。例如,当网络可达时,连接;如果不是,请断开连接。