我有一个.NET 4 Windows服务,我写的是定期(通常每天一次)通过串口与外部设备通信.总而言之,这项服务非常有用,但是对于一个客户,不时会有一个调用SerialPort.Open()抛出以下异常:
System.IO.IOException: Insufficient system resources exist to complete the requested service. at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) at System.IO.Ports.SerialPort.Open()
基于异常,会认为服务器资源不足,但似乎并非如此.CPU或多或少是空闲的,并且有足够的内存和磁盘.
网上有很多关于SerialPort.Open()抛出其他IOExceptions 的提及,我已经实现了Zach Saw的SerialPortFixer,但它似乎解决了一个不同的问题.
这是我正在做的事情的一个例子(大大简化).此类的几个实例(使用不同的串行端口名称)始终在内存中,然后每个实例大约每天调用一次Run()方法.
public class Collector
{
private SerialPort _port;
private string _portName;
public void Run()
{
try
{
// Run Zach Saw's IOException workaround
SerialPortFixer.Execute(_portName);
using …Run Code Online (Sandbox Code Playgroud)