一般建议您不应该GC.Collect
从您的代码中调用,但此规则的例外情况是什么?
我只能想到一些非常具体的案例,强制垃圾收集可能是有意义的.
想到的一个例子是服务,每隔一段时间醒来,执行一些任务,然后长时间睡眠.在这种情况下,强制收集以防止即将空闲的进程保持比需要的更多内存可能是个好主意.
是否还有其他可以接听电话的情况GC.Collect
?
我的USB条形码扫描仪有点问题.我正在使用带有"SerialPort"类的Scanner:
this._barcodeScanner = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One) { Handshake = Handshake.None, ReadTimeout = 500, WriteTimeout = 500 };
this._barcodeScanner.Open();
this._barcodeScanner.DataReceived += BarcodeScannerCallback;
Run Code Online (Sandbox Code Playgroud)
如果我通过"SerialPort"类打开USB设备,我就无法正常关闭软件,虚拟端口永远保持打开状态,或直到我重启整个计算机.
所以我的问题是,在我通过C#代码拔出设备后,有没有办法关闭虚拟端口?
问候
[编辑#1]
好的,还有一些代码:
这样,如果设备已插入,我每隔10秒检查一次:
private bool CheckUsbDeviceAvailability()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSSerial_PortName WHERE PortName = '" + this.PortName + "'");
if (searcher.Get().Count > 0)
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
那是串口的Callback-Event:
void BarcodeScannerCallback(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = this._barcodeScanner.ReadExisting().Replace(Convert.ToChar(2), Convert.ToChar(32)).Trim();
if (data.StartsWith("AX"))
{
string[] arrData = data.Split('\n'); …
Run Code Online (Sandbox Code Playgroud)