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
数据成员。
我想知道的是,将 reader
和 writer
作为 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 获得更好的运行时性能。例如,当网络可达时,连接;如果不是,请断开连接。
我从一位同事那里收到了一些 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
数据成员。
我想知道的是,将 reader
和 writer
作为 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 获得更好的运行时性能。例如,当网络可达时,连接;如果不是,请断开连接。