Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有ExtendedExecutionForegroundSession的UWP应用程序在最小化时内存使用量会爆炸_C#_Uwp_Windows 10 - Fatal编程技术网

C# 具有ExtendedExecutionForegroundSession的UWP应用程序在最小化时内存使用量会爆炸

C# 具有ExtendedExecutionForegroundSession的UWP应用程序在最小化时内存使用量会爆炸,c#,uwp,windows-10,C#,Uwp,Windows 10,我有一个UWP应用程序,它从蓝牙低能量BLE设备读取实时蓝牙数据,使用打印,并将其记录到csv文件中 目前每250毫秒触发一个计时器,该计时器记录数据并更新图形。最后一个操作在UI线程上计划 我遇到了一个问题,当应用程序被最小化或被另一个应用程序覆盖时,应用程序就会进入该问题,因此我决定在应用程序maifest中启用受限功能,并声明ExtendedExecutionForegroundSession,如前所述。这就解决了这个问题,即使应用程序最小化,数据也会按照计时器记录 然而,这造成了以下影响

我有一个UWP应用程序,它从蓝牙低能量BLE设备读取实时蓝牙数据,使用打印,并将其记录到csv文件中

目前每250毫秒触发一个计时器,该计时器记录数据并更新图形。最后一个操作在UI线程上计划

我遇到了一个问题,当应用程序被最小化或被另一个应用程序覆盖时,应用程序就会进入该问题,因此我决定在应用程序maifest中启用受限功能,并声明ExtendedExecutionForegroundSession,如前所述。这就解决了这个问题,即使应用程序最小化,数据也会按照计时器记录

然而,这造成了以下影响:当应用程序被最小化时,而不是被另一个应用程序覆盖,而是被最小化,内存使用就会爆炸,并以大约100MB/分钟的速度增长。我的假设是,尽管应用程序处于活动状态,并且UI任务已被调度,但当应用程序被最小化时,它们无法运行。当我再次最大化应用程序时,内存使用量会迅速下降,图形也会快速更新,直到它赶上。我的问题如下:

当应用程序最小化时,是否可以运行计划的UI任务? 如果没有,是否可以检测应用程序何时最小化,以便在这种情况下不启动这些任务?但是保留日志记录,它现在在扩展会话中起作用。 我感谢您的任何见解,并为我在UWP方面缺乏经验而道歉

当应用程序最小化时,是否可以运行计划的UI任务

当应用程序最小化时,应用程序进入暂停状态。这不会立即完成,但在最小化一段时间后,应用程序将暂停

在挂起状态下,当前应用程序状态将保留到下一次恢复或关闭应用程序时,在此期间无法执行UI计划的工作

如果没有,是否可以检测应用程序何时最小化,以便在这种情况下不启动这些任务

目前UWP没有提供API来检查窗口是否最小化,但是最小化后会触发挂起事件,所以我们可以处理App.OnSuspending,触发事件时可以关闭函数


特定内容可以查看

最后,事实证明,如果将应用程序最小化,确实无法启动UI任务。为了检测这一点,我订阅了Window.Current.VisibilityChanged事件,该事件仅在应用程序最小化时触发,而不是在其失去焦点时触发,因此我可以检测何时发生这种情况,并且仅在其他任务继续运行时有条件地触发UI更新任务,由于应用程序处于持续的前台执行会话中。

使用Visual Studio中的内存探查器来调试使用。正如我在上一篇文章中所解释的,我的理解是,如果我使用ExtendedExecutionForGroundSession,应用程序将永远不会进入挂起状态。那不是真的吗?因为在我看来,documentationUpdate中非常明确:按照您的建议进行测试后,暂停事件永远不会被触发,就像expectd一样。随着内存使用量的增加,App状态明显发生了变化,但它不是暂停。您可以考虑编写代码来关闭触发代码中的相关功能以执行扩展。我不确定我知道您的意思。我这里的问题是要知道哪些功能在扩展执行会话中不可用,而这些功能在应用程序实际位于前台时可用,因为我在文档中找不到类似的功能抱歉,我没有说清楚。您在问题描述中提到,您不需要启动某些任务。我的意思是这些任务的特点。我不知道你的任务具体指的是什么。但有一点是清楚的,目前UWP没有提供API来最小化检测窗口。所以你不能用窗口最小化作为判断的依据。