xamarin应用程序启动缓慢

2024-01-04

我们正在 PCL 上开发一个跨平台应用程序,但目前我们仅使用 Android 设备进行测试。
我们担心的是,启动应用程序需要大约 6 到 8 秒(取决于我们测试的设备),这非常慢。
设置几个断点后,我们发现时间消耗得相当均匀。
我们确实注意到这个特定部分花费了更长的时间:

  • 到达 MainActivity 上的 onCreate() 之前 1 秒(之前有一个闪屏,之前只有一张图像和背景颜色)
  • 1s on base.OnCreate(bundle);
  • 1s on global::Xamarin.Forms.Forms.Init(this, bundle);
  • 1.5s on Page mainPage = new LogScreen();(创建主页然后将其设置为主导航页面)。

我建议的第一件事是不要对应用程序的调试版本进行基准测试,Mono 运行时和 Jit 代码的代码路径与发布版本不同,共享运行时的使用,程序集大小等,等等,等等都会影响启动和执行时间。

以下是使用内部基准测试程序(有条件编译,不注入,并使用操作系统的系统时钟)在高端和低端设备上“非常大”的基于 Android Forms 的应用程序的启动时间示例。

应用程序概述:

  • Xamarin.Forms v2.4.0.269-pre2
  • 混合编码和基于 XAML 的页面、控件等...
  • 启用 XAML 编译器
  • "Splash screen" disabled
    • A Theme-based splash on MainActivity will add:
      • 在快速设备上启动时间超过 200 毫秒,
      • 在具有慢速闪存访问的设备上需要 1-2 秒
    • 只是不要使用基于活动的启动屏幕;-)
  • 多重索引
  • Proguard'd(通过带有自动反馈循环的 UI 测试大大减少了 jar)
  • 链接器(链接全部,通过带有自动反馈的 UI 测试生成的自定义链接描述文件,大大减少了程序集大小)
  • 100% 源代码构建,允许折叠命名空间和减少程序集
  • Viper 架构,无第三方 DI/IoC
  • 使用数据、资源和网络优先级队列的延迟加载设计
  • 用于所有数据的领域活动对象和查询(数据库最小大小:250MB,最大大小1.2GB)

时间是通过 shell 脚本生成的,该脚本重新启动设备,监视启动以等待系统稳定,启动一系列应用程序(GApps、Facebook、Instagram、Twitter 等...),等待系统稳定,然后通过以下方式启动 Forms 应用程序:

export deviceTime=$(echo "$(adb -s $deviceID shell cat /proc/uptime | awk '{print $1}') * 1000" | bc -l)
adb -s $deviceID shell am start -n com.sushihangover.GeneticCancerDNAMapper/com.sushihangover.GeneticCancerDNAMapper.DevOpsDashboard --el startTime ${deviceTime%.*}

Google Pixel(基于 Oreo)设备(应用程序可在约 430 毫秒内使用):

I GeneticCancerDNAMapper: 0.162 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
I GeneticCancerDNAMapper: 0.164 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
I GeneticCancerDNAMapper: 0.201 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
I GeneticCancerDNAMapper: 0.244 : Xamarin.Forms.Forms.Init
I GeneticCancerDNAMapper: 0.266 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
I GeneticCancerDNAMapper: 0.324 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
I GeneticCancerDNAMapper: 0.324 : Xamarin.Forms.Application Content
I GeneticCancerDNAMapper: 0.349 : Xamarin.Forms.Application Content ~Creation Completed~
I GeneticCancerDNAMapper: 0.353 : Xamarin.Forms.Application.MainPage ~Displayed~
I GeneticCancerDNAMapper: 0.43 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication

低端“Android One”512MB 设备,带非常慢flash(应用程序可在约 4.5 秒内使用):

Re: https://en.wikipedia.org/wiki/Android_One https://en.wikipedia.org/wiki/Android_One

I/GeneticCancerDNAMapper(10904): 2.453 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
I/GeneticCancerDNAMapper(10904): 2.467 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
I/GeneticCancerDNAMapper(10904): 2.731 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
I/GeneticCancerDNAMapper(10904): 3.016 : Xamarin.Forms.Forms.Init
I/GeneticCancerDNAMapper(10904): 3.166 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
I/GeneticCancerDNAMapper(10904): 3.571 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
I/GeneticCancerDNAMapper(10904): 3.571 : Xamarin.Forms.Application Content
I/GeneticCancerDNAMapper(10904): 3.772 : Xamarin.Forms.Application Content ~Creation Completed~
I/GeneticCancerDNAMapper(10904): 3.799 : Xamarin.Forms.Application.MainPage ~Displayed~
I/GeneticCancerDNAMapper(10904): 4.457 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xamarin应用程序启动缓慢 的相关文章

随机推荐

  • 使用输入框替换文本区域中的部分字符串(属性)

    主要目标 创建一个可以实时预览 HTML CSS 代码的网站 进一步来说 用户可以在某些特定部分编辑 HTML CSS 代码 因此 实时预览中的代码不会源自文本区域 而是源自 div Image of what I am trying to
  • Android 上使用微信 API 发朋友圈

    我用微信API创建了一个应用程序 我尝试在我的用户墙上发帖 我在iOS上可以成功发布微信朋友圈 提示尚未审核 然而在 Android 上 什么也没发生 这是我的代码 private IWXAPI api api WXAPIFactory c
  • htaccess 403 尝试使用 ErrorDocument 时遇到禁止错误

    我想在我的项目中有一个自定义 403 页面 所以我在 htaccess 文件中添加了这些代码 Order deny allow Deny from all Allow from 192 168 1 0 24 ErrorDocument 40
  • 如何在限制x轴后自动设置y轴限制

    假设我有一定数量的数据集想要一起绘制 然后我想放大某个部分 例如 使用ax set xlim or plt xlim or plt axis 当我这样做时 它仍然保留缩放之前的计算范围 我怎样才能让它重新缩放到当前显示的内容 例如 使用 i
  • 如何构建柔性结构?

    我想用像这样的 CSS构建一个灵活的结构 顶部和底部divs具有固定高度 而中心框具有响应高度 它们都应该覆盖整个容器 div 谁能告诉我该怎么做 body position relative padding 0px margin 0px
  • 如何在 GWT 中获取一年中的周数

    有没有一种简单的方法可以从a获取一年中的一周信息Date对象或从毫秒时间开始GWT在客户端 像这样的事情 Date date new Date Date yearStart new Date date getYear 0 0 int wee
  • 如何保存 nltk FreqDist 图?

    我尝试了不同的方法来保存我的情节 但我尝试过的每件事都出现了空白图像 而且我目前还没有没有想法 有其他可以解决此问题的建议吗 代码示例如下 word frequency nltk FreqDist merged lemmatizedToke
  • 如何使用 SuiteScript 采购订单加载项目?

    朋友们正在使用 NetSuite 和 SuiteScript 我可以保存运行脚本的采购订单并对创建的采购订单进行收费 但是当我将返回数据项值作为空值时 我需要获取该项目的 ID 结果给我的 NetSuite 日志是 采购订单 ID 3706
  • VBScript - 按文件名中的字符串查找文件夹中的文件,将找到的文件移动到不同的文件夹

    我仍在学习 VBS 不确定我是否以正确或最有效的方式进行此操作 测试场景如下 除了常规桌面项目之外 我还添加了三个名为 Tool YouTube welcome to facebook BBC news 当我的代码 底部 运行时 它会按预期
  • 将文本文件中的数据提取到 Excel 中

    我是 VBA 新手 所以完成我的任务是相当困难的 几天来一直在阅读和尝试来自不同线程的代码 但没有成功 所以我希望有人可以帮助我 我有多个文本文件 需要从中提取数据 但我只需要将某些数据 例如日期时间 放在第一列中 将卡号放在第二列中 从该
  • UITableViewCell 中的 AlamofireImage af_setImageWithURL 没有占位符图像

    我使用 AlamofireImage 在 UITableViewCell 中的 UIImageView 上设置图像 如下所示 cell imageView af setImageWithURL url 下载后图像不显示 当从内存缓存加载图像
  • 通过身份验证访问 Samba 共享,无驱动器映射 - C# [重复]

    这个问题在这里已经有答案了 我正在尝试启动与需要身份验证的 samba 共享的连接 我不想映射驱动器 共享的凭据始终相同 一旦通过身份验证 我就可以使用常规路径来使用它 我正在使用 C net 有任何想法吗 我用谷歌搜索了一些东西并阅读了模
  • 在C中,从main调用函数[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 在 C 中
  • 如何限制应用程序仅适用于 Android 手机

    您好 我的目标用户是Android仅限电话 我想限制应用程序的安装Android仅限手机 不适用于平板手机和平板电脑 我需要在 AndroidManifest xml 中应用哪些配置 以便 Google Play 应用程序不会在表格和平板手
  • 使用 pygame.midi 演奏音符

    我正在尝试使用 pygame midi 模块播放声音 这是我的代码 使用 usr bin env python import pygame midi import time pygame midi init print pygame mid
  • 使用 selenium web 驱动程序在多个浏览器上运行测试

    我试图通过 for 循环在多个浏览器上运行相同的测试 但它始终只在 Firefox 上运行 bros FIREFOX CHROME INTERNET EXPLORER for bro in bros print Running bro n
  • 如何将S3存储桶中的图像文件直接读取到内存中?

    我有以下代码 import matplotlib pyplot as plt import matplotlib image as mpimg import numpy as np import boto3 s3 boto3 resourc
  • 有效绘制字节数组流以在 Android 中显示的选项

    简单来说 我需要做的就是在Android中显示视频帧的实时流 每帧都是YUV420格式 我有一个回调函数 我在其中接收单个帧作为字节数组 看起来像这样的东西 public void onFrameReceived byte frame in
  • 最佳实践 - 发送 javamail mime 多部分电子邮件 - 和 gmail

    我有一个 Tomcat 应用程序需要发送确认电子邮件等 我已经使用 Javamail mail jar 对电子邮件程序进行了编码以发送多部分文本 html 电子邮件 我的代码基于 Java EE 示例 我在本地服务器上使用 SMTP MTA
  • xamarin应用程序启动缓慢

    我们正在 PCL 上开发一个跨平台应用程序 但目前我们仅使用 Android 设备进行测试 我们担心的是 启动应用程序需要大约 6 到 8 秒 取决于我们测试的设备 这非常慢 设置几个断点后 我们发现时间消耗得相当均匀 我们确实注意到这个特