Flutter-Charts_painter大数据量绘制性能优化-数据收敛

news2024/11/17 11:48:38

Flutter-Charts_painter大数据量绘制性能优化-数据收敛

1、背景介绍

HRV测量仪器上传的数据,每秒有250个数据,业务上需要测量180秒,预计有3w-5w个数据点需要绘制到折线图上去。Charts_painter绘制这么大的数据是时候会有些卡顿,所以需要进行性能优化。

优化方向有两个:1、缩减数据量 2、组件异步渲染。

Flutter暂时不支持异步离屏渲染,所以我们的只能进行数据量缩减

2、优化方式 - 数据收敛

方案:

  • 每20个数据点收敛成两个,保留最大值和最小值两个数据点,这样数据就收敛了10倍,并且保留数据特征
  • 需要判断20个数据点的走向趋势。通过最大值和最小值在原数据中的索引下标位置,确定谁在前谁在后
  static List<double> handleBMData(List<double> source) {
    List<double> reslutList = [];
    List<double> partList = [];
    source.asMap().forEach((key, value) {
      partList.add(value);
      if ((key + 1) % 20 == 0) {
        double maxValue = partList.reduce(math.max);
        double minValue = partList.reduce(math.min);
        int maxIndex = partList.indexWhere((element) => element == maxValue);
        int minIndex = partList.indexWhere((element) => element == minValue);

        // int maxStep = math.min(maxIndex, 9 - maxIndex);
        // int minStep = math.min(minIndex, 9 - minIndex);
        // if (maxStep > minStep) {
        //   reslutList.add(maxValue);
        // } else if (maxStep < minStep) {
        //   reslutList.add(minValue);
        // } else {
        //   if (maxIndex >= minIndex) {
        //     reslutList.add(maxValue);
        //   } else {
        //     reslutList.add(minValue);
        //   }
        // }

        if (maxIndex > minIndex) {
          reslutList.addAll([minValue, maxValue]);
        } else {
          reslutList.addAll([maxValue, minValue]);
        }

        partList = [];
      }
    });
    return reslutList;
  }

3、效果展示

优化前,数据密集,折线抖动,GPU渲染压力大

优化前

优化后,数据分散,折线能有效反映数据特征,GPU渲染压力小

优化后

可见我们保留了原数据的数据特征,同时将数据下降了一个量级,让Charts_painter渲染性能直接指数级大幅提升

如果有码友能从异步渲染角度解决性能问题,欢迎探讨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义markdown-loader

webpack markdown-loader 想要创建自己的makdown-loader 首先创建markdown文件 # 前端学习总结## 一、深入学习HTMLCSS* HTML常见特性## 二、深入学习javascript创建my-md-loader.js 我们需要先将markdown的语法转化成html标签语法 使用marked pnpm add marked loader返回…

“2023数据安全智能化中国行”活动,开幕即高能

工信部等16部门近日发布的《关于促进数据安全产业发展的指导意见》提出&#xff0c;到2025年&#xff0c;数据安全产业基础能力和综合实力明显增强&#xff0c;数据安全产业规模超过1500亿元&#xff0c;年复合增长率超过30%。到2035年&#xff0c;数据安全产业进入繁荣成熟期。…

MySQL JDBC 中 tinyint(1) 处理为Boolean 的代码逻辑

MySQL JDBC 中 tinyint(1) 类型&#xff0c;在查询时默认会被处理为 Boolean 类型。 参数配置 官方文档中提供了参数配置&#xff1a; 上图标记的两个参数可以控制如何处理 tinyint(1) 类型和 BIT 类型。 tinyInt1isBit 默认 true&#xff0c;因此会把 tinyint(1) 类型转换…

Python3 函数实例及演示

函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。 函数能提高应用的模块性&#xff0c;和代码的重复利用率。我们已经知道Python提供了许多内建函数&#xff0c;比如print()。但也可以自己创建函数&#xff0c;这被叫做用户…

JS 设计模式 - 怎么让你的代码提示一个档次

设计模式是我们在解决一些问题的时候 &#xff0c;针对特定的问题给出的简介并且优化的处理方案 这篇文章说提及到的 JavaScript 设计模式将围绕着封装方法类来展开叙述 构造器模式 构造器模式本质就是我们平常在编码中常用的封装方法&#xff0c;重复利用构造函数 // 这是…

72 优化算法【动手学深度学习v2】

72 优化算法【动手学深度学习v2】 深度学习学习笔记 学习视频&#xff1a;https://www.bilibili.com/video/BV1bP4y1p7Gq/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source75dce036dc8244310435eaf03de4e330 优化问题 优化问题一般是最小化f…

怎么样可以查看系统的内存和显示您硬盘中文件和文件夹的分布情况——SpaceSniffer

一、找内存 &#xff08;1&#xff09;右击此电脑&#xff0c;点击属性&#xff0c;即可看到如下 &#xff08;2&#xff09;或者可以打开电脑桌面&#xff0c;右击任务栏&#xff0c;如下 然后打开任务管理器 二、搜索各个盘的文件 SpaceSniffer是一个可以显示您硬盘中文…

防火墙有关iptables的知识点

基本概念 什么是防火墙 在计算中&#xff0c;防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的所有网络通信均要经过此防火墙。防火墙对流经它的网络通信进行扫描&#xff0c;这样能够过滤掉一些攻击&#xff0c;以免其在目标计算机…

MySQL——索引视图练习题

学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, Score)…

大白话高并发(三)

背景 高并发得第三篇&#xff0c;讲一讲压测吧&#xff0c;因为我的目的是模拟100万人同时来秒杀。 是不是真的要找100万个人 没必要 &#xff0c;你就算100万人掐着表在同一毫秒内把请求请求某一台机器&#xff0c;服务器也不可能在同一时间处理那么多请求&#xff0c;因为…

同步辐射XAFS表征方法的应用场景分析

X射线吸收精细结构XAFS表征方法是一种用于研究物质结构和化学环境的分析技术。XAFS 使用 X 射线照射到物质表面&#xff0c;并观察由此产生的 X 光吸收谱。 ​XAFS 技术通常应用于研究高分子物质、生物分子、纳米结构和其他类型的物质。例如&#xff0c;XAFS 可以用来研究高分子…

使用git上传项目到GitHub教程

文章目录一、安装Git二、上传本地文件到git上。1.创建本地版本库2.通过命令git init把这个文件夹变成Git可管理的仓库3、使用git commit -m "XXX"命令提交4、在Github上创建一个Git仓库5、执行git remote add origin xxxxxxxx.git6、使用$ git push -u origin master…

35、基于51单片机自动灭火避障智能小车 消防灭火小车系统设计

摘要 智能作为现代的新发明&#xff0c;是以后的发展方向&#xff0c;他可以按照预先设定的模式在一个环境里自动的运作&#xff0c;不需要人为的管理&#xff0c;可应用于科学勘探等等的用途。智能小车就是其中的一个体现&#xff0c;本次设计的多功能智能灭火避障小车&#…

MySQL番外篇-硬件优化概述

备注:测试数据库版本为MySQL 8.0 硬件优化概述 MySQL的硬件有: CPU内存硬盘网络资源 对于硬件的选择与调优&#xff0c;在系统上线前就需要考虑起来。 当然我们都知道: 好的CPU&#xff0c;可以让SQL语句解析得更快&#xff0c;进而加快SQL语句的执行速度。大的内存&#…

GEE学习笔记 八十七:python版GEE动态加载地图方法

在Google Earth Engine的python版API更新后&#xff0c;之前使用folium动态加载地图的代码就不能在正常运行&#xff0c;因为整个Google Earth Engine的地图加载服务的URL发生了更新&#xff0c;所以我们也需要更新相关绘制方法。下面我会讲解一种新的绘制方法&#xff0c;大家…

【深度学习】激活函数

上一章——认识神经网络 新课P54介绍了强人工智能概念&#xff0c;P55到P58解读了矩阵乘法在代码中的应用&#xff0c;P59&#xff0c;P60介绍了在Tensflow中实现神经网络的代码及细节&#xff0c;详细的内容可以自行观看2022吴恩达机器学习Deeplearning.ai课程&#xff0c;专…

NVIDIA Tesla V100部署与使用

在先前的实验过程中&#xff0c;使用了腾讯云提供的nvidia T4GPU&#xff0c;尽管其性能较博主的笔记本有了极大提升&#xff0c;但总感觉仍有些美中不足&#xff0c;因此本次博主租赁了nvidia V100 GPU&#xff0c;看看它的性能表现如何。 和先前一样&#xff0c;只需要将服务…

2023美赛A题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛A题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…

医学图象分割常用损失函数(附Pytorch和Keras代码)

对损失函数没有太大的了解&#xff0c;就是知道它很重要&#xff0c;搜集了一些常用的医学图象分割损失函数&#xff0c;学习一下&#xff01; 医学图象分割常见损失函数前言1 Dice Loss2 BCE-Dice Loss3 Jaccard/Intersection over Union (IoU) Loss4 Focal Loss5 Tvesky Loss…

学生投票系统-课后程序(JAVA基础案例教程-黑马程序员编著-第三章-课后作业)

【案例3-4】学生投票系统 记得 关注&#xff0c;收藏&#xff0c;评论哦&#xff0c;作者将持续更新。。。。 【案例介绍】 案例描述 某班级投票竞选班干部&#xff0c;班级学生人数为100人&#xff0c;每个学生只能投一票。 本任务要求&#xff0c;编程实现一个投票程序&…