如何使用GC.KeepAlive()以及用于什么目的
本文关键字:用于 什么 何使用 GC KeepAlive | 更新日期: 2023-09-27 18:07:33
我们如何使用GC.KeepAlive()
,目的是什么?
我使用Socket将文件从终端(Windows-CE)传输到服务器。转车所需时间为8分钟。5分钟后,Windows-CE自动关闭(如果未按下触摸屏)
如果我使用GC.KeepAlive()
,这是否解决了我的问题?
您很少需要使用GC.KeepAlive
- 非常很少。例如,如果您希望防止终结器的副作用过早发生,则可以使用它。我经常看到它用于Mutex
—保持互斥锁活动直到应用程序结束,以确保只有一个实例。(using
语句实际上在这里更好,但这是另一回事。)
不,它听起来不像是与你的情况有关。
来自。net的MSDN库:
KeepAlive方法的目的是确保存在一个对有过早回收风险的对象的引用垃圾收集器。可能发生这种情况的常见场景是当托管代码或数据中没有对对象的引用时,但对象仍然在非托管代码中使用,如Win32 api,非托管dll,或使用COM的方法。
所以这不能解决你的问题。事实上,它甚至与你的问题无关。您唯一能做的就是在Windows CE上运行的服务/应用程序中添加代码,只要传输正在进行,就可以防止系统关闭
屏幕关机是设备的电源管理设置。不管有没有应用在运行,它都会发生。总检察长与此事毫无关系。
如果你想防止电源管理器将设备置于低功耗状态,你有几个选择。你可以在应用中定期调用SystemIdleTimerReset。
你可以使用SetSystemPowerState强制电源状态为你喜欢的状态。
您可以通过调整[HKEY_LOCAL_MACHINE'System'CurrentControlSet'Control'Power'Timeouts]
的设置(然后是WM_SETTINGS_CHANGE广播IIRC)将电源管理器超时更改为更适合您的设置。
最好的"解决方案"将取决于你的应用程序的要求,你的用户的要求和目标设备的电源管理系统。