WPF程序卡顿检测方法和装置与流程

文档序号:13685646阅读:1349来源:国知局
WPF程序卡顿检测方法和装置与流程

本发明涉及计算机通讯技术领域,特别是涉及一种wpf程序卡顿检测方法和装置。



背景技术:

wpf(windowspresentationfoundation,windows呈现基础)是一种基于directx和gpu加速来实现的图形界面显示技术。在使用wpf技术实现图形界面显示时,时常需要显示大量的数据,例如要同时显示1000张图片,若再增加一些显示特效则容易出现界面卡顿或卡死现象,显示效率和效果非常差。

为了有效解决卡顿现象,提高显示效率和效果,亟需一种wpf程序卡顿的检测方法来监测wpf是否处于卡顿状态。然而,目前并没有一种简单易行的wpf程序卡顿检测方法。



技术实现要素:

基于此,有必要针对目前没有wpf程序卡顿检测方法的问题,提供一种wpf程序卡顿检测方法和装置。

一种wpf程序卡顿检测方法,包括以下步骤:

在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中所述全局变量中的系统时间为图形显示事件被触发时的系统时间;

在所述当前的系统时间与所述全局变量中的系统时间的差值大于预设的阈值时,判定所述wpf程序处于卡顿状态。

一种wpf程序卡顿检测装置,包括

时间读取模块,用于在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中所述全局变量用于记录图形显示事件被触发时的系统时间;

时间比较模块,用于所述全局变量中的系统时间与当前的系统时间比较;

卡顿判定模块,用于在所述当前的系统时间与所述全局变量中的系统时间的差值大于预设的阈值时,判定所述wpf程序处于卡顿状态。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:

在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中所述全局变量用于记录图形显示事件被触发时的系统时间;

在所述当前的系统时间与所述全局变量中的系统时间的差值大于预设的阈值时,判定所述wpf程序处于卡顿状态。

一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:

在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中所述全局变量用于记录图形显示事件被触发时的系统时间;

在所述当前的系统时间与所述全局变量中的系统时间的差值大于预设的阈值时,判定所述wpf程序处于卡顿状态。

本发明在wpf程序触发启动后,首先读取全局变量中存储的图形显示事件被触发时的系统时间,然后将图形显示触发时间触发时的系统时间与当前的系统时间进行对比,在当前的系统时间与图形显示触发时间触发时的系统时间的差值大于预设的阈值时,判定wpf程序处于卡顿状态。图形显示触发事件是wpf在图形显示过程中必然会触发的事件,且触发的频率和触发时间间隔是固定的,当wpf程序卡顿时,该事件将不会被触发。因此,检测图形显示触发事件触发时间的间隔(即计算当前的系统时间与图形显示触发事件触发的系统时间的差值与预设的阈值的关系),即可判定wpf程序是否处于卡顿状态,该方法简单、快速且准确率高。

附图说明

图1为本发明的wpf程序卡顿检测方法在其中一个实施例中的流程示意图;

图2为本发明的wpf程序卡顿检测方法在其中一个实施例中的流程示意图;

图3为本发明的wpf程序卡顿检测方法在其中一个实施例中的流程示意图;

图4为本发明的wpf程序卡顿检测装置在其中一个实施例中的流程示意图;

图5为本发明的wpf程序卡顿检测装置在其中一个实施例中的流程示意图;

图6为本发明的计算机设备在一个实施例中的结构示意图。

具体实施方式

下面将结合较佳实施例及附图对本发明的内容作进一步详细描述。显然,下文所描述的实施例仅用于解释本发明,而非对本发明的限定。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应当说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。

图1为本发明的wpf程序卡顿检测方法在一个实施例中的流程示意图,如图1所示,本发明实施例中的wpf程序卡顿检测方法,包括以下步骤:

步骤s110,在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中全局变量用于记录图形显示事件被触发时的系统时间。

wpf(windowspresentationfoundation,windows呈现基础),是基于windows的用户界面框架,具有统一的编程模型、语言和框架,同时可提供了全新的多媒体交互用户图形界面。其中,wpf框架的核心是用于形状、文档、图像、视频、动画、三维以及用于放置控件和内容的面板的一系列控件,具有灵活、强大且易扩展的动画机制。

在本实施例中,在触发wpf程序后包括wpf程序启动时或者wpf程序在运行时。图形显示触发事件是指在利用wpf程序进行图形显示时一定会被触发的事件,通常这类事件的触发频率和触发事件都是固定的,当wpf程序处于卡顿(即未运行时),图形触发事件将不再被触发。常用的图形显示触发事件包括:compositontarget.rendering事件、基于dispatchertimer的动画显示事件以及基于animation的动画类显示事件等。应当理解,上述的图形显示触发事件并不唯一,本领域技术人员可以根据实际的需求进行选择。

在wpf程序运行时,实时检测图形显示事件被触发时的系统时间,并将系统时间保持到全局变量中,其中全局变量中可以存储每一次图形显示事件被触发时的系统时间或只记录图形显示事件最近一次被触发时的系统时间。当全局变量只记录图形显示事件最近一次被触发时的系统时间时,检测图形显示事件被触发时的系统时间,并将系统时间保持到全局变量中,当检测到下一次图形显示事件被触发的系统时间时,根据检测到的下一次图形显示事件被触发的系统时间来更新全局变量,全局变量中只存储最近(即最后)一次图形显示事件被触发时的系统时间,即全局变量中始终只存储一个系统时间。

步骤s120,在当前的系统时间与全局变量中的系统时间的差值大于预设的阈值时,判定wpf程序处于卡顿状态。

具体地,预设的阈值可以是任意时间,在实际的应用中,用户可以根据实际应用情况进行设置。根据wpf图形显示的特性,预设的阈值通常取值为几十毫秒至几百毫秒。当当前的系统时间与全局变量中的系统时间的差值大于预设的阈值时,表明图形显示触发事件在固定的时间内没有被触发,此时wpf程序处于未运行或暂停运行状态,即wpf程序处于卡顿状态。

上述的wpf程序卡顿检测方法,在wpf程序触发启动后,首先读取全局变量中存储的图形显示事件被触发时的系统时间,然后将图形显示触发时间触发时的系统时间与当前的系统时间进行对比,在当前的系统时间与图形显示触发时间触发时的系统时间的差值大于预设的阈值时,判定wpf程序处于卡顿状态。图形显示触发事件是wpf在图形显示过程中必然会触发的事件,且触发的频率和时间是固定的,当wpf程序卡顿时,该事件将不会被触发。因此,检测图形显示触发事件触发时间的间隔(即计算当前的系统时间与图形显示触发事件触发的系统时间的差值与预设的阈值的关系),即可判定wpf程序是否处于卡顿状态,该方法简单、快速且准确率高。

在其中一个实施例中,如图2所示,在读取全局变量中的系统时间的步骤之前,还包括:

步骤s130,在触发启动wpf程序后,注册图形显示触发事件。

步骤s140,记录图形显示触发事件被触发时的系统时间,并根据系统时间更新全局变量。

具体地,在触发启动wpf程序后,即在wpf程序启动时或wpf程序运行时,注册图形显示触发事件。然后记录图形显示触发事件被触发时的系统时间,然后根据系统时间更新全局变量。实时记录图形显示触发事件被触发的时间,根据该事件被触发的时间来判断wpf程序是否处于卡顿状态,该方法简单且准确率高。

在其中一个实施例中,所述图形显示触发事件为compositiontarget.rendering事件,在记录图形显示触发时间触发时的系统时间的步骤中,包括:

步骤s141,在wpf程序的ui线程中,利用compositiontarget.rendering事件的回调函数记录所述compositiontarget.rendering事件被回调时的系统时间。

具体而言,rendering事件是wpf中动画和布局应用于组合树后,将事件路由到指定的事件处理程序。rendering事件引发wpf呈现进程,rendering事件可用于创建自定义绘图内容。每帧调用一次此事件处理程序。在wpf中,可以通过system.windows.media.compositiontarget.rendering事件来实现基于帧的动画,它不是在定制的时间区间里引发的,而是在布局后和渲染前的每一帧引发一次。compositiontarget是一个类,表示正在其上绘制用户的应用程序的显示图面。对于一个正常运行、没有卡顿的wpf程序来说,compositiontarget.rendering事件触发频率接近wpf程序的默认渲染帧率,即60帧/秒。

ui线程是指主线程,在wpf中图形的显示运行在ui线程中。其中,利用wpf中的compositiontarget.rendering事件来显示图形的过程为:利用compositiontarget.rendering事件的回调函数来调用compositiontarget.rendering事件并记录compositiontarget.rendering事件被回调时的系统时间,并根据系统时间实时更新全局变量。利用compositiontarget.rendering事件的触发时间来判断wpf程序是否处于卡顿状态,结果准确性高。

在其中一个实施例中,读取全局变量中的系统时间的步骤中,包括:

步骤s111,在wpf程序的非ui线程中定时读取全局变量中的系统时间。

具体地,wpf的非ui线程为除了ui线程之外的线程。在wpf的非ui线程中定时读取全局变量中的系统时间,一方面减少了ui线程在图形显示时的压力,增加wpf程序运行的速度;另一方面,由于在wpf卡顿时,ui线程是暂停工作的,无法继续读取全局变量中的系统时间,利用wpf的非线程读取全局变量中的系统时间,可以有效保证后期wpf卡顿判断的准确性。

在其中一个实施例中,如图3所示,wpf程序卡顿检测方法还包括:

步骤s150,在当前的系统时间与全局变量中最近一次的系统时间的差值大于预设的阈值时,根据当前的系统时间与全局变量中的系统时间的差值来确定wpf程序的卡顿时间。

具体地,在当前的系统时间与全局变量中最近一次的系统时间的差值大于预设的阈值时,根据当前的系统时间与全局变量中的系统时间的差值来确定wpf程序的卡顿时间,即当前的系统时间与全局变量中的系统时间的差值即为wpf程序的卡顿时间。计算出wpf程序的卡顿时间,便于用户了解当前wpf程序运行的状态,并根据卡顿时间进行相应的处理。

在其中一个实施例中,如图3所示,wpf程序卡顿检测方法还包括:

步骤s160,在卡顿时间大于预设的参考时间时,记录wpf程序卡顿信息,并将wpf程序卡顿信息传输至服务器。

在本实施例中,预设的参考时间可以为任意时间,例如几秒、几十秒、几分钟等。具体地,当wpf程序的卡顿时间大于预设的参考值时,表明wpf程序卡顿时间较长,严重影响wpf程序的运行。在卡顿时间较长时,记录wpf程序卡顿信息,然后将wpf程序卡顿信息发送至服务器,便于用户及时查看并了解wpf程序卡顿的原因,并给出相应的解决方式。另外,wpf程序卡顿信息包括wpf程序卡顿时运行参数、待显示的图形信息等。

为了便于理解本发明中的wpf程序卡顿检测方法,给出一个详细的实施例。

(1)在wpf程序启动时,注册system.windows.media.compositiontarget.rendering事件,并在system.windows.media.compositiontarget.rendering事件的回调函数中记录被回调时的系统时间,保存到一个全局变量t中。

(2)在另一个线程a(非ui线程)上定时(例如,每10ms)读取一次全局变量t的数值,并与当前的系统时间tnow比较,得到:△t=tnow-t。

(3)若△t大于阈值m(例如,m可以取100ms),则说明当前wpf程序正处于卡顿状态。

(4)当软件继续处于卡顿状态,线程a上定时计算出的△t将持续变大。此时△t即是程序卡死的时长。

根据上述本发明的wpf程序卡顿检测方法,本发明还提供一种wpf程序卡顿检测装置,下面结合附图及较佳实施例对本发明的wpf程序卡顿检测装置进行详细说明。

图4为本发明的wpf程序卡顿检测装置在一个实施例中的结构示意图。如图4所示,该实施例中的wpf程序卡顿检测装置,包括:

时间读取模块10,用于在触发启动wpf程序后,读取全局变量中的系统时间,并与当前的系统时间比较,其中全局变量用于记录图形显示事件被触发时的系统时间。

时间比较模块20,用于全局变量中的系统时间与当前的系统时间比较。

卡顿判定模块30,用于在当前的系统时间与全局变量中的系统时间的差值大于预设的阈值时,判定wpf程序处于卡顿状态。

在其中一个实施例中,如图5所示,该实施例中的wpf程序卡顿检测装置,包括:

触发事件注册模块40,用于在触发启动wpf程序后,注册图形显示触发事件。

时间记录模块50,用于记录图形显示触发事件被触发时的系统时间。

时间更新模块60,用于根据系统时间更新全局变量。

在其中一个实施例中,如图5所示,该实施例中的wpf程序卡顿检测装置,包括:

时间记录模块50,用于在wpf的ui线程中,利用compositiontarget.rendering事件的回调函数记录compositiontarget.rendering事件被回调时的系统时间。

时间更新模块60,用于根据系统时间实时更新全局变量。

在其中一个实施例中,如图5所示,该实施例中的wpf程序卡顿检测装置,包括:

时间读取模块10,用于在wpf的非ui线程中定时读取全局变量中的系统时间。

在其中一个实施例中,如图5所示,该实施例中的wpf程序卡顿检测装置,包括:

卡顿时间计算模块70,用于在当前的系统时间与全局变量中的系统时间的差值大于预设的阈值时,根据当前的系统时间与全局变量中的系统时间的差值来确定wpf程序的卡顿时间。

在其中一个实施例中,如图5所示,该实施例中的wpf程序卡顿检测装置,包括:

卡顿信息记录模块80,用于在卡顿时间大于预设的参考时间时,记录wpf程序卡顿信息。

卡顿信息发送模块90,用于将wpf程序卡顿信息传输至服务器。

上述wpf程序卡顿检测装置可执行本发明实施例所提供的wpf程序卡顿检测方法,具备执行方法相应的功能模块和有益效果。至于其中各个功能模块所执行的处理方法,例如时间读取模块10、卡顿信息记录模块80、卡顿信息发送模块90,可参照上述方法实施例中的描述,此处不再进行赘述。

根据上述本发明的wpf程序卡顿检测方法和装置,本发明还提供一种计算机设备,下面结合附图及较佳实施例对本发明的计算机设备进行详细说明。

图6为本发明的计算机设备在一个实施例中的结构示意图。如图6所示,该实施例中的计算机设备600,包括存储器601、处理器602及存储在存储器上并可在处理器上运行的计算机程序,其中处理器执行程序时可实现本发明方法实施例中的所有方法步骤。

上述计算机设备600中处理器602可执行本发明实施例所提供的wpf程序卡顿检测方法,具备执行方法相应的有益效果。可参照上述方法实施例中的描述,此处不再进行赘述。

根据上述本发明的wpf程序卡顿检测方法、装置和计算机设备,本发明还提供一种计算机可读存储介质,下面结合附图及较佳实施例对本发明的计算机可读存储介质进行详细说明。

本发明实施例中的计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可以实现本发明方法实施例中的所有方法步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等”。

上述计算机可读存储介质用于存储本发明实施例所提供的wpf程序卡顿检测方法的程序(指令),其中执行该程序可以执行本发明实施例所提供的wpf程序卡顿检测方法,具备执行方法相应有益效果。可参照上述方法实施例中的描述,此处不再进行赘述。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1