当前位置: 首页 > news >正文

Unity项目优化案例二

本文地址:https://blog.csdn.net/t163361/article/details/135024136

针对工作中遇到的优化问题,记录一下,给大家优化自己的项目提供一些思路。
公司产品最近正给国内某大型赛事做支撑服务暴露出不少问题。

使用环境

Unity 2021.3.0f1
cpu i7 10750H
显卡 T1000 4G
内存 16G

问题分析解决

程序集成了EasyDecal插件。最近被大量使用,暴露出不少问题。
1.当创建多个EasyDecal对象时,最后一个会无法加载
2.在某些模型上添加特别慢 2000ms以上 记录一下,下次更新
3.修改大小时,会特别慢 2000ms以上 记录一下,下次更新

优化思路

问题一

  1. 先确认问题
    开发电脑无法触发问题,测试电脑才会触发。
  2. 多次尝试(2天)后,终于找到比较容易触发的方法
  3. 通过观察发现问题出现概率和性能有关,速度越慢的电脑越容易触发
  4. 同时,功能加载的部分用的是Task,其中用到了CancellationTokenSource这个类,下面是部分调用代码
	  tokenSource = new CancellationTokenSource();var  tasktoken = tokenSource.Token;var task = Task.Run(() =>{if(tasktoken.IsCancellationRequested)return;this.meshCutter.CutMesh(this.dynamicMesh);},tasktoken);task.GetAwaiter().OnCompleted(() =>{this.Parent.AddDynamicMesh(this.dynamicMesh, false);task.Dispose();tokenSource?.Cancel();});

5.通过加log,发现下面两个处理函数调用次数不匹配

this.meshCutter.CutMesh(this.dynamicMesh);
this.Parent.AddDynamicMesh(this.dynamicMesh, false);

AddDynamicMesh对应的CutMesh没有调用,这样方向就有了。
6.仔细看代码,偶然发现tokenSource是这么定义的

static CancellationTokenSource tokenSource = new CancellationTokenSource();

7.好嘛,全局通用,那肯定当性能比较卡,多次触发加载的时候会导致

tokenSource?.Cancel();

这句代码把最后一次加载给强制关闭掉。当然如果卡的厉害应该会出现多次加载被强制关闭的情况。
8.解决就比较简单了,把定义里面的static给删掉就好了

最终效果

问题解决。这个问题主要的时间花费在问题重现上了。当能有很容易的触发方式后,通过加log的方式,很快就确认问题了。

http://www.lryc.cn/news/260858.html

相关文章:

  • 如何发布自定义 npm 组件包
  • iOS_给View的部分区域截图 snapshot for view
  • 计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)
  • IDEA debug窗口左边工具栏隐藏与显示
  • WPF 基于TableControl的页面切换
  • Lua 元表,元方法
  • C# WPF上位机开发(利用tcp/ip网络访问plc)
  • Knife4j 接口文档如何设置 Authorization 鉴权参数?
  • CentOS 防火墙管理及使用的redis基本常用命令
  • 路由器原理
  • 采埃孚4D成像雷达拆解
  • 若依框架springboot——修改前端图片上传样式
  • mysql 数据库 关于库的基本操作
  • 【通用】Linux,VSCode,IDEA,Eclipse等资源相对位置
  • 音视频技术开发周刊 | 323
  • STM32在CTF中的应用和快速解题
  • SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配
  • Android APP 常见概念与 adb 命令
  • 菜鸟学习日记(python)——函数
  • 垃圾回收 (GC) 在 .NET Core 中是如何工作的?
  • Appium 图像识别技术 OpenCV
  • 产品Axure的元组件以及案例
  • 智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • flutter Pageview组件
  • 如何用 Cargo 管理 Rust 工程系列 丙
  • Vue学习笔记-Vue3中的provide与inject
  • 2021年数维杯国际大学生数学建模A题新冠肺炎背景下港口资源优化配置策略求解全过程文档及程序
  • 【css】css实现文字两端对齐效果:
  • ElasticSearch指南 - Mapping - Metadata fields
  • 12.15每日一题(备战蓝桥杯摘花生)