我有一个.NET 应用程序,它主要执行以下操作:
- 通过 COM 端口连接到一组串行设备(约 32 个),并处理来自这些设备的数据
- 当从这些串行设备接收到消息时(有一些库正在监视原始串行数据,并让我的应用程序知道它们何时组装了完整的“消息”),我的应用程序会将消息记录到 SQL,将数据点添加到屏幕上的实时图表中,并将消息添加到屏幕上滚动的消息列表中
当 PC 处于活动状态时,我们会看到这些消息以每秒 1 条的速度从串行设备传入。我知道这些设备总是以大约该速率接收消息(它们是无线接收器,我知道无线发射器的传输频率)。但是,当 PC 闲置一段时间(15-30 分钟)时,我们不再看到应用程序中传入的消息。当我再次与程序交互时,它可能会滞后一分钟(这是使用计算机的人告诉我的),然后它再次响应并开始正常运行。
编辑了此部分:
有趣的是,我们确实在此期间看到了一些间歇性的 SQL 日志。例如,在应用程序的主屏幕上,有一个供稿,我们可以在其中看到“所有”传入的消息。我们在今天 10:02 停止在那里看到消息,但此后仍有一些消息被记录到 SQL 中(有些在 10:05)。在代码中,SQL 日志记录实际上发生在消息显示之后,尽管在不同的线程上。
结束编辑
系统有 32GB 的 RAM,但应用程序只使用了大约 250 MB。PC 上 RAM 的最大用户是 SQL 数据库,占用了大约 600 MB。我认为它运行在具有 16 个线程的 Xeon 处理器上。
有什么线索可以解释为什么会这样吗?可能是 Windows 的省电功能吗?我关闭了所有能找到的电源管理设置,但有些设置可能由 PC 的站点网络管理。内存被分页到磁盘?但看来这些进程实际上并没有在程序处于“空闲”状态时执行——我不希望分页出现这种情况。
编辑:在此时间范围内记录的唯一系统事件是 GroupPolicy 事件:“计算机的组策略设置已成功处理。自上次成功处理组策略以来未检测到任何更改。”