为了便于资源文件的管理,kanzi有着一套自己的资源文件管理系统,将所有的资源文件打包进.kzb文件中。但是资源文件又很庞大,为了加快开机速度,应用程序的响应速度,很多时候我们要选择预加载资源,多线程加载资源。今天我们来看看kanzi如何完成我们的需求。

并行加载资源

当用户在多核处理器的环境下运行kanzi程序的时候,kanzi会自动使用多个CPU核加载kzb文件里的GPU资源到RAM。因为在加载过程中最大的数据量是由GPU资源处理的,因此并行加载资源可以显著的提高应用的加载时间。

kanzi并行加载的GPU资源包括各种纹理、着色器和网格数据。为了将这些资源从RAM部署到GPU内存,加载一些预制的模板,kanzi总是使用主线程。

在kanzi中,你可以在app展示给用户之前,加载在你的工程中要使用的模板的资源字典。比如,你可以创建一个展示给用户看的加载窗口,而后台却在加载app的剩余的资源字典,一旦加载完成,就从加载页面跳到你选择的应用的部分的界面。

不同的平台,用于加载的线程的数量也是不同的。当针对你的平台使用了最优化的数量的加载线程,那么你的应用程序的启动和整个加载时间都会得到减少。

预加载资源字典

1、在Screen->RootPage下创建加载界面或者加载动画。

2、在Prefabs下创建你的kanzi应用程序。

3、在Project窗口,选中RootPage,在Properties窗口点击Add,添加On Attached触发器。

4、在Properties窗口下,On Attached触发器下点击Add下拉菜单,选择Preload Resources行为。

5、在Preload Resources行为的参数编辑框中,在Resource Dictionaries For Preloading属性中,选择你想预加载的资源字典。

6、在Project窗口选中Screen控件,在Trigers面板添加On Preloading of Resources Completed 触发器。

7、为On Preloading of Resources Completed 触发器添加Execute Script行为。

8、在Execute Script窗口选择<add new script...>创建新的脚本。

9、编辑运行脚本:

// Find the RootPage object that is the parent of the Loading screen
// object you want to replace when preloading of resource is completed.
var rootPage = node.lookupNode('./RootPage');
// Find the Loading screen object you want to replace.
var loadingScreen = node.lookupNode('./RootPage/Loading screen');
// Instantiate the prefab that contains the content you want to show
// after you remove the Loading screen object.
var firstScreen = instantiatePrefab('kzb://<ProjectName>/Prefabs/Viewport 2D', 'First screen');
// Remove the Loading screen object.
rootPage.removeChild(loadingScreen);
// Add the prefab named First screen to the RootPage.
rootPage.addChild(firstScreen);

设置加载核的数量

在应用的代码中,使用应用的框架配置或者资源管理的API,你都可以去设置应用程序中用于加载GPU资源的核心数。

在设置核心数的时候,你也可以设置管理内存的大小。如果你不设置管理内存的大小,或者设置为0,并且加载的线程数大于0的话,kanzi会自动使用主内存池的一半大小用于资源的加载。在C++代码中,可以在onConfigure()函数里进行设置:

// Set loadingThreadCount to the number of cores in the processor
// of your target device.
// For example, to use all four cores of a four-core processor,
// set the value to 3, to use only two cores, set the value to 1.
configuration.loadingThreadCount = 3;// Set the size of the memory manager between half and full amount allocated
// for the memory pool of your application.
// For example, if you allocated 200 MB for the memory pool, set
// the size of the memory manager between 100 and 200 MB.
configuration.loadingThreadsMemoryManagerSize = 100 * 1024 * 1024;

此外,你还可以在C++中的onConfigure()函数或者工程配置文件applicat.cfg中来进行偏好设置。(请参考下一篇)

取消并行加载

取消并行加载,只需要将loadingThreadCount设置为0就可以了,这时,kanzi就会使用主线程来加载资源,而且,kanzi不会分配内存管理。

Kanzi学习之路(7):kanzi的资源预加载相关推荐

  1. Android插件化学习之路(一)之动态加载综述

    前段时间,公司项目完成了插件化的开发,自己也因此学习了很多Android插件化的知识,于是想把这些内容记录下来,本次带来Android插件化的第一篇:动态加载综述 Android插件化学习之路(一)之 ...

  2. 前端资源预加载并展示进度条

    我们经常会看到,一些站点在首次进入的时候会先显示一个进度条,等资源加载完毕后再呈现页面,大概像这样: 然后整个页面的操作就会非常流畅,因为之后没必要再等待加载资源了.尤其是在移动端,或者是页游中,这样 ...

  3. android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...

    不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...

  4. android webView的缓存机制和资源预加载

    android 原生使用WebView嵌入H5页面 Hybrid开发 一.性能问题 android webview 里H5加载速度慢 网络流量大 1.H5页面加载速度慢 渲染速度慢 js解析效率 js ...

  5. 微信H5资源预加载(图片、字体)

    一.背景 微信活动H5页面的特点之一就是资源多(图.字体.音频等),动不动就几十兆.庞大的资源量很可能导致页面不流畅.如下图,因为背景图还没加载完,进入第二页时会有一瞬间"白屏". ...

  6. Note | 前端资源预加载

    目录 - dns-prefetch - preconnect - subresource - prerender - prefetch - preload dns-prefetch 通过 DNS 预解 ...

  7. prefetch 和preload_资源预加载preload和资源预读取prefetch简明学习

    前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介 ...

  8. GameFramework教程✨十四、AB包资源初始化(单机模式),与资源预加载

    目录

  9. Kanzi学习之路(1):Kanzi的简介和安装

    2016年底的时候,写了一篇kanzi学习之路的序,http://blog.csdn.net/u010977122/article/details/53791660 ,希望感兴趣的猿友or媛友一起加入 ...

最新文章

  1. hdu 1003 dp
  2. 二十一、SPI设备驱动及应用(二)
  3. 算法提高课-搜索-Flood fill算法-AcWing 1106. 山峰和山谷:flood fill、bfs
  4. ansible 下lineinfile详细使用
  5. SAP 电商云 Spartacus UI 设置 delivery mode 在 3G 慢速网络下的排队效果
  6. allan方差 imu_MEMS-IMU随机误差的Allan方差分析
  7. rails 两表关联查询_Rails中的单表继承与多态关联:找到适合您的方法
  8. C语言头文件尖括号和双引号的区别
  9. 测试面试题集-生活物品测试:杯子、伞、钢笔、桌子
  10. 【Web前端】hexo+GitPages搭建博客
  11. WebView优化提升H5加载速度方案
  12. 两个PB下使用的OfficeXP/2003风格工具栏控件
  13. 圆梦微软 — 旅游和入职体验
  14. 磁波刀和海扶刀的区别
  15. cala中隐式转换(implicit conversion)的优先顺序
  16. windows server:关闭ie增强安全配置
  17. linux cp acp,CP_THREAD_ACP与CP_ACP
  18. 擎创科技正式加入openEuler社区,共建开源生态
  19. minecraft服务器搭建教程_Minecraft我的世界服务端搭建教程,附优化启动参数
  20. qq引流有哪些模式? QQ引流的几种方法

热门文章

  1. ECCV 2020 论文大盘点-目标检测篇
  2. 空间机械臂Matlab/Simulink仿真程序自由漂浮空间机械臂(双臂)轨迹跟踪控制matlab仿真程序
  3. 【论文阅读】Dense Passage Retrieval for Open-Domain Question Answering
  4. 方法论--面对问题,提出问题,解决问题
  5. 中国地质大学计算机研究所宿舍,在地大,据说一些寝室闪闪发光
  6. V8引擎如何回收内存以及如何优化
  7. 《JavaScript高级程序设计》五、引用类型(基本包装类型)
  8. win7已经阻止此发行者在您的计算机上运行软件,Win7系统提示无法验证发布者windows已阻止软件的解决方法教程[多图]...
  9. DiskGenius 复制磁盘 提示 设备未就绪
  10. 内核/逻辑处理器/线程/多线程/多CPU/多核CPU