跟踪例如什么是良好做法正在进行串行通信的应用程序中收到消息的时间戳?
假设应用程序每秒20次在串行端口上接收流式消息。并且您希望跟踪收到的消息的时间戳。一种方法可以是这样的:
public class SerialPortHandler {
private DateTime _rxTimestamp;
private SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {
_rxTimestamp = DateTime.Now;
// Collect bytes in RX buffer and do stuff...
}
}
但是每次收到数据时,_rxTimestamp
都会被设置为DateTime对象的新实例。我知道C#有垃圾收集,它会在内存中处理未引用的对象。但是,这种方式是否完全符合良好的OOP实践,或者在计算机资源方面是否会被视为浪费?
答案 0 :(得分:3)
您的具体案例在内存使用方面没有问题。 System.DateTime
为a value type,您的作业不涉及装箱值,因此没有创建GC需要收集的对象。唯一发生的事情是设置字段_rxTimestamp
的值。
如果创建DateTime
的实例是正确的术语,你甚至可以争辩。会发生什么是当前日期和时间的64位值放在_rxTimestamp
的内存点中。旧的价值只是被覆盖了。