一种动态缓存调整方法及系统
技术领域
本发明涉及一种动态缓存调整方法及系统,属于计算机技术领域。
背景技术
目前市场上一般手游为了加载速度,都会在内存中设置各种缓存池,用以将各种资源预先加载到缓存池,当需要调用时直接从缓存池载入,大大的提高加载速度减少游戏卡顿。缓存池的种类有角色的缓存池,动作的缓存池,Gameobject的缓存池等等。
通过设置缓存池的上限可以保证缓存池的容量不会持续增大,进而被系统停止进程。但静态的缓存池在缓存池满了之后可能会存在真正最需要的资源没有进池,无用的资源却持续被清除的问题。
发明内容
为解决上述问题,本发明的目的在于提供一种动态缓存调整方法及系统,在游戏每次加载一个资源时,通过更新资源池、资源的权重,并对缓存池的资源动态排序,定期清理,保证缓存池中的资源都是最新最必须的,以此达到完美兼顾加载速度和系统资源使用的目的。
本发明解决其问题所采用的技术方案一方面是:一种动态缓存调整方法,其特征在于,该方法包括:S100、创建缓存池,并设置缓存池内存上限值、清理周期以及总清理时长;S200、运行游戏程序,对游戏的资源的进行加载;S300、缓存池对资源进行缓存以及按照清理周期和清理时长对资源进行循环清理;S400、缓存池根据游戏发送的资源缓存请求执行资源的加载和/或卸载,统计各个资源的资源信息,其中资源信息包括资源的加载时间以及资源的冷却时间,并根据资源信息计算资源在缓存池中的权重值;S500、根据缓存池中缓存的资源信息设置最小缓存权重值,并在资源池满载的情况下判断入池的资源的权重值是否大于最小缓存权重值,若是将最小缓存权重值对应的资源移出缓存池并将入池的资源按照权重入池,否则将入池的资源移出资源池,并结束资源使用。
进一步的,所述S300包括:S301、读取上次缓存池对缓存资源执行清理的时刻,并根据当前时刻与缓存池对缓存资源执行清理的时刻的差,得到清理冷却时间;S302、判断清理冷却时间是否大于清理周期,若是则执行步骤S304,否则执行步骤S303;S303、休眠一定时间后,更新清理冷却时间并返回执行S302,其中一定时间可自定义;S304、按照资源权重值的大小排列倒序清理缓存池的资源;S305、记录清理缓存池资源所耗费的时间,记为清理时长,判断清理时长是否大于总清理时长,若是则结束清理操作,否则返回执行步骤S304。
进一步的,所述S301还包括:若未读取到上次缓存池对缓存资源执行清理的时刻,则直接设置清理冷却时间为0。
进一步的,所述S400包括:S410、根据游戏请求内容加载对应的资源;S420、判断该资源是否在缓存池中,若是则执行步骤S430,否则执行步骤S440;S430、从缓存池加载该资源并记录该资源的使用时刻;S440、从磁盘加载该资源并记录该资源的使用时刻和加载时间;S450、资源加载完毕,根据资源的使用时刻和加载时间计算各个资源的权重值。
进一步的,所述S450包括:
S451、记录当前时刻,与资源的使用时间做差的绝对值得到冷却时间;
S452、根据资源的冷却时间和加载时间计算各个资源的权重值,计算式为W=T×A+L×B
其中W为权重值,其中T为冷却时间,其中L为加载时间,其中A、B为权重系数,可自定义;S453、按照步骤S452的方法计算各个资源的权重值,并在每次缓存池加载资源时更新资源的权重值。
进一步的,所述S500包括:S501、检查资源池中各个资源的权重值,将权重值最小的资源的权重值设为最小缓存权重值;S502、资源加载完毕,用于游戏调用同时检查资源池是否已满,若是则执行步骤S503,否则执行步骤S504;S503、判断入池的资源的权重值是否大于最小缓存权重值,若是则将最小缓存权重值对应的资源移出资源池,并将入池的资源按照权重入池,否则将入池的资源移出资源池;S504、将入池的资源按照权重入池;S505、结束资源使用。
本发明解决其问题所采用的技术方案另一方面是:一种动态缓存调整系统,其特征在于,包括:缓存模块,用于创建缓存池并缓存资源,并设置缓存池内存上限值、清理周期以及总清理时长;加载模块,用于运行游戏程序,对游戏的资源的进行加载;清理模块,用于对缓存池中缓存的资源进按照清理周期和清理时长对资源进行循环清理;记录模块,用于统计缓存池中各个资源的资源信息;判断模块,用于据缓存池中缓存的资源信息设置最小缓存权重值并判断资源权重值与最小缓存权重值的大小;缓存管理模块,用于将资源从缓存池中移出或将资源移入缓存池。
进一步的,所述清理模块还包括:读取计算模块,用于读取上次缓存池对缓存资源执行清理的时刻,并根据当前时刻与缓存池对缓存资源执行清理的时刻的差,得到清理冷却时间;第一判断模块,用于判断清理冷却时间是否大于清理周期;休眠模块,用于根据设置的休眠时间执行休眠;清除模块,用于按照资源权重值的大小排列倒序清理缓存池的资源,将符合条件的资源移出缓存池;记时模块,用于记录清理缓存池资源所耗费的时间,记为清理时长;第二判断模块,用于判断清理时长是否大于总清理时长,并根据判断结果执行继续清理或结束清理操作。
进一步的,所述记录模块还包括:内容读取模块,用于根据游戏请求内容加载对应的资源;检查模块,用于获取资源池中缓存的资源信息;判断模块,用于判断请求入池的资源是否在缓存池中;日志模块,用于记录加载资源的使用时刻和加载时间;计算模块,用于根据资源的使用时刻和加载时间计算各个资源的权重值。
进一步的,所述判断模块还包括:统计模块,用于检查资源池中各个资源的权重值,并按照资源权重大小排列;设置模块,用于将权重值最小的资源的权重值设为最小缓存权重值;检查模块,用于资源加载完毕后检查资源池是否已满;第一判断模块,用于判断入池的资源的权重值是否大于最小缓存权重值;结束模块,用于结束资源使用。
本发明的有益效果是:可动态调整缓存池的内存占用、可最大效率的缓存游戏当前最需要的资源、大幅提高缓存池的资源命中率、完全满足激烈战斗场景的加载需求以及避免频繁的加载卸载导致游戏卡顿。
附图说明
图1是本发明的方法流程示意图;
图2是本发明的系统结构示意图;
图3是本发明的清理流程示意图;
图4是本发明的资源加载及权重计算流程示意图;
图5是本发明的权重判断流程示意图;
图6是本发明的优选实施例。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
参照图1是本发明的方法流程示意图,
包括:S100、创建缓存池,并设置缓存池内存上限值、清理周期以及总清理时长;S200、运行游戏程序,对游戏的资源的进行加载;S300、缓存池对资源进行缓存以及按照清理周期和清理时长对资源进行循环清理;S400、缓存池根据游戏发送的资源缓存请求执行资源的加载和/或卸载,统计各个资源的资源信息,其中资源信息包括资源的加载时间以及资源的冷却时间,并根据资源信息计算资源在缓存池中的权重值;S500、根据缓存池中缓存的资源信息设置最小缓存权重值,并在资源池满载的情况下判断入池的资源的权重值是否大于最小缓存权重值,若是将最小缓存权重值对应的资源移出缓存池并将入池的资源按照权重入池,否则将入池的资源移出资源池,并结束资源使用。
参照图2是本发明的系统结构示意图,
包括:缓存模块,用于创建缓存池并缓存资源,并设置缓存池内存上限值、清理周期以及总清理时长;加载模块,用于运行游戏程序,对游戏的资源的进行加载;清理模块,用于对缓存池中缓存的资源进按照清理周期和清理时长对资源进行循环清理;记录模块,用于统计缓存池中各个资源的资源信息;判断模块,用于据缓存池中缓存的资源信息设置最小缓存权重值并判断资源权重值与最小缓存权重值的大小;缓存管理模块,用于将资源从缓存池中移出或将资源移入缓存池。
清理模块还包括:读取计算模块,用于读取上次缓存池对缓存资源执行清理的时刻,并根据当前时刻与缓存池对缓存资源执行清理的时刻的差,得到清理冷却时间;第一判断模块,用于判断清理冷却时间是否大于清理周期;休眠模块,用于根据设置的休眠时间执行休眠说;清除模块,用于按照资源权重值的大小排列倒序清理缓存池的资源,将符合条件的资源移出缓存池;记时模块,用于记录清理缓存池资源所耗费的时间,记为清理时长;第二判断模块,用于判断清理时长是否大于总清理时长,并根据判断结果执行继续清理或结束清理操作。
记录模块还包括:内容读取模块,用于根据游戏请求内容加载对应的资源;检查模块,用于获取资源池中缓存的资源信息;判断模块,用于判断请求入池的资源是否在缓存池中;日志模块,用于记录加载资源的使用时刻和加载时间;计算模块,用于根据资源的使用时刻和加载时间计算各个资源的权重值。
判断模块还包括:统计模块,用于检查资源池中各个资源的权重值,并按照资源权重大小排列;设置模块,用于将权重值最小的资源的权重值设为最小缓存权重值;检查模块,用于资源加载完毕后检查资源池是否已满;第一判断模块,用于判断入池的资源的权重值是否大于最小缓存权重值;结束模块,用于结束资源使用。
参照图3是本发明的清理流程示意图,
包括:
S301、读取上次缓存池对缓存资源执行清理的时刻,并根据当前时刻与缓存池对缓存资源执行清理的时刻的差,得到清理冷却时间;
S302、判断清理冷却时间是否大于清理周期,若是则执行步骤S304,否则执行步骤S303;
S303、休眠一定时间后,更新清理冷却时间并返回执行S302,其中一定时间可自定义;
S304、按照资源权重值的大小排列倒序清理缓存池的资源;
S305、记录清理缓存池资源所耗费的时间,记为清理时长,判断清理时长是否大于总清理时长,若是则结束清理操作,否则返回执行步骤S304。
参照图4是本发明的资源加载及权重计算流程示意图,
S410、根据游戏请求内容加载对应的资源;
S420、判断该资源是否在缓存池中,若是则执行步骤S430,否则执行步骤S440;
S430、从缓存池加载该资源并记录该资源的使用时刻;
S440、从磁盘加载该资源并记录该资源的使用时刻和加载时间;
S450、资源加载完毕,根据资源的使用时刻和加载时间计算各个资源的权重值。
参照图5是本发明的权重判断流程示意图,
S501、检查资源池中各个资源的权重值,将权重值最小的资源的权重值设为最小缓存权重值;
S502、资源加载完毕,用于游戏调用同时检查资源池是否已满,若是则执行步骤S503,否则执行步骤S504;
S503、判断入池的资源的权重值是否大于最小缓存权重值,若是则将最小缓存权重值对应的资源移出资源池,并将入池的资源按照权重入池,否则将入池的资源移出资源池;
S504、将入池的资源按照权重入池;
S505、结束资源使用。
结合上述各个工作流程,可以总结为:
第一步在激烈的战斗场景下需要加载的对象数量会远远高于平时,过小的资源池上限会导致卡顿,过大的资源池上限会导致内存过高
第二步给缓存池配置一个较合理的资源池上限,保证可以满足激烈战斗场景的加载需求。
第三步每一个进入缓存池的资源,都会标记该资源的最后使用时间,和加载时长,通过最后使用时间和加载时间得到该资源的缓存权重
第四步根据资源缓存权重周期执行清理操作,优先释放加载快且不经常使用的资源
第五步这样就可以保证缓存池内的资源都是加载时长较长,使用频繁的资源,保证游戏不会频繁卡顿
第六步在加载需求持续较高时,同一战斗场景下,玩家或者npc所使用的技能,特效等资源都会非常频繁的被使用,所以这些资源基本都会进入缓存池,这样保证频繁使用的资源不会被频繁的加载和卸载,保证游戏不会一直处于频繁的卡顿中
第七步由于有周期性的清理操作,长时间未使用的资源和加载快的都会被慢慢清理掉,所以在加载需求降下来以后,内存占用会慢慢回落,使内存与性能够同时兼顾,达到最优,具体可参考图6是本发明的优选实施例。
为了便于理解,现在举一实施例加以说明,参考图6是本发明的优选实施例,
例如手游《XX》中应用。
找到游戏内现有的缓存池加以改造或者找到需要频繁加载卸载且比较耗时的资源,做一个带权重的缓存池,比如特效缓存池
第一步创建资源缓存池
第二步设置缓存池上限为UpLimit
第三步设置清理周期为T
第四步设置允许最大清理时长为T0
第五步设置上次清理时间ClearTime为当前时间
第六步当前时间减去ClearTime是否大于T?如果是,转到第七步否则转到第十二步
第七步按照权重倒叙清理缓存资源,清理掉加载时间短,使用不频繁的资源
第八步缓存池清理操作的总清理时长小于T0?如果是,转到第九步,否则转到第七步
第九步结束本次清理操作
第十二步Sleep 10s然后转到第六步
第十三步游戏会不断的请求资源,比如,当前游戏请求某资源P
第十四步判断该资源是否在缓存池内,如果是,转到第十六步,否则转到第十五步
第十五步从磁盘加载该资源P1,更新该资源P的加载时长,和最新的使用时间
第十六步从缓存池加载该资源P1,更新该资源P的最新的使用时间
第十七步游戏显示该资源P1,使用完毕后,转到第十八步
第十八步判断缓存池是否已满?如果是,转到第十步否则转到第十九步
第十九步判断当前资源P1的权重M1和缓存池内权重最小的资源P(min)的权重M(min)的大小比较,如果M1>M(min)转到第二十步,否则转到二十一步
第二十步资源P(min)丢弃卸载掉,转到第二十二步
第二十一步资源P1进入缓存池,按照P1的权重,插入到缓存池中
第二十二步结束资源使用
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。