LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎
前言
LayaAir3的每一个分支版本都是一次较大的提升,在3.1彻底完善了引擎生态结构之后,本次的3.2会重点完善全平台发布相关的种种能力,例如,除原有的安卓与iOS系统外,还支持Windows系统、Linux系统、鸿蒙Next系统,以及主流的国产芯片适配等。另外就是性能的大幅提升以及一键发布安装包等易用性的大幅提升。当然,主旋律之外,3D的更新也是不可或缺的,下面将分别详细介绍。
01 升级为真正的全平台引擎
HTML5引擎通常被视为全平台引擎,因为HTML5标准的WEB基本上可以运行于各个系统平台。从这个角度来看,LayaAir之前的版本也可称为全平台引擎。但对于发布原生安装包的角度来说,LayaAir的历史版本只能发布安卓与iOS系统的安装包,并不是真正意义的全平台。
从LayaAir3.2开始,在历史版本的发布能力之上,我们会新增支持Windows系统、Linux系统、鸿蒙Next系统的发布。其中,Windows系统的exe安装包发布在3.2.0-beta.1版本内率先推出测试,Linux系统、鸿蒙Next系统还在紧密对接中,将会在3.2正式版之前推出。
一旦3.2正式版推出,开发者可以基于各个操作系统发布安装包、基于HTML5标准发布Web版本、以及发布到各个主流小游戏平台,使得LayaAir引擎升级为真正的全平台游戏引擎。
相对于非全平台的游戏引擎,LayaAir3引擎一套代码开发,全部平台发布运行的模式,可以大幅降低开发成本、提升市场推广机会。
与此同时,作为自有知识产权的国产引擎,LayaAir3对主流的国产芯片也在陆续对接之中,对信创硬件的支持将是3D引擎实现全国产化替代的关键,也是很多信创项目的刚需。
02 Native易用性大幅提升
对于从来没有打过包的开发者而言,Native打包是一个门槛很高的事情,很多游戏公司甚至设置了专门Native打包的工程师。我们在社区里,也发现了开发者因为安装Native打包环境等问题被卡住流程。
因此,3.2版本中,我们支持自动打包成为各平台的安装包(例如exe、apk、ipa),并且提供选项,由开发者自主选择对应平台的安装环境,然后自动安装好打包所需的环境,使得开发者不必再为安装什么样的环境才能顺利打包而发愁。
当然,对于资深的开发者,如果更习惯使用传统的开发环境来打安装包,我们也保留了发布为原生包工程的方案。例如安卓勾选导出Android Studio项目
、iOS勾选导出Xcode项目
即可发布为原生包工程,而不是直接打包。
另外,由于iOS系统的限制,常规测试流程非常繁琐,对于新手也是非常大的障碍。因此,我们会提供LayaAir引擎官方的运行器安装包,支持在安卓和iOS系统的真机环境中,直接使用安装包扫码IDE,在IDE里即时修改,真机扫码立即查看效果。不仅大幅降低了iOS中的测试成本,对于安卓真机测试,也可避免一次又一次的打包等待时间。提升了原生包测试的易用性。
在PC端,我们提供了PC模拟器。与移动端的运行器一样,可以在项目中即时修改,在PC模拟器上直接查看打包后的运行效果。
基于以上的优化,LayaAir Native打包与测试的易用性大幅提升,开发者的门槛大幅下降。开发与发布效率得以明显提升。
03 性能与效率大幅提升
无论何时,引擎的性能都是非常核心的指标,这将是项目发挥效果的天花板。本次版本,我们从Native安装包的运行性能、Spine动画的运行性能、3D粒子性能这几个方面对引擎性能进行了明显提升。
3.1 安装包运行性能提升
LayaAir3.2开始,我们优化了Native引擎的底层架构。引擎的渲染底层以及部分对性能消耗较大的核心模块,已下沉到Native C++层进行了实现。
经过此次调整,Native APP的运算性能得以明显提升。同样以7477个渲染节点的3D示例为例,安卓测试机型的性能提升了50%,iOS测试机型的性能提升了近100%。
3.2 Spine运行性能提升
对于Spine动画,很多开发者都认可LayaAir引擎内置版的性能。但内置版存在两个问题,一是没有及时与Spine官方的版本同步,二是功能被阉割了,只保留了基础功能。所以多数开发者选择了Spine官方库的引入,该方案基于Spine官方的JS运行库,将渲染接入到LayaAir,所以功能齐全。但带来的问题就是Spine官方运行库的性能远不如LayaAir引擎内置的骨骼动画。
3.2开始,为提升Spine动画使用者的体验,我们针对Spine的官方库做了私有的性能优化,大幅提升了Spine官方库的动画在LayaAir引擎中的运行性能。
我们首先采用了合并指令、GPU运算优化、缓存运算优化,这几种方式对CPU计算能力瓶颈进行提升。在一些CPU计算能力相对较差,但GPU相对较好的机型上,甚至可以得到几十倍的提升。这对CPU能力不强的机型,以及不支持JIT的iOS小游戏环境,是非常有价值的。
缓存优化由于会额外占用内存,属于牺牲内存提升性能的一种方案,引擎默认不开启,当开发者在Spine性能得不到满足的时候,内存消耗也不大的情况下,可以主动开启缓存优化。但是对于Spine使用量不是特别大的产品,也可以保持默认不开启,即便是不开启,相对于Spine官方库的性能也得到了明显的提升。
Spine动画最终运行性能的瓶颈主要存在两方面,一方面是计算性能的瓶颈,另一方面是渲染的瓶颈。例如屏蔽渲染的时候,可以支撑同屏8000个Spine接近满帧,一旦正常渲染,最多只能支持到同屏500个spine动画接近满帧,例如下图所示。
在上图的测试数据中,细心的开发者会发现,不同机型在GPU计算优化的幅度存在差异,这是由于不同机型的GPU能力的差异导致,GPU能力越强,采用GPU计算优化的效果越明显。在某些GPU能力弱的机型上,GPU计算优化的效果甚至还不如合并优化的性能,如果存在这种机型,开发者可以选择手动关闭默认开启的GPU计算优化功能。
尽管经过一系列的计算优化后,Spine性能已提升了数倍到几十倍不等,但我们仍然没有停下优化的脚步。当下正在对Spine动画的渲染部分进行极致优化,预计在3.2正式版推出前,Spine动画的整体性能会得到进一步的提升。
3.3 3D粒子编译效率提升
曾有开发者反馈3D粒子较多的时候导致卡顿。我们分析Demo后发现,shader的define数量较多,这导致了shader变体数量庞大,编译时间过长。
由于shader在持续编译的过程出现卡顿现象,这是不可避免的。所以,我们进行了一系列的优化工作,主要目标是减少shader的define数量,降低shader变体数量,以减少编译时间,避免出现明显的卡顿现象。
例如一个Demo的粒子材质球,在优化前有92种变体,编译时长为7.004秒。使用3.2优化后的版本,只剩下66种变体,总编译时长也降至1.474秒。
以上数据由于是累计值,因此在项目的实际使用过程中,材质球越多,得到的对比差距会越大。这对大量使用3D粒子的项目来说,大幅提升了用户体验。
04 正式支持WebGPU
LayaAir3.0开始接入WebGPU,直到此次的3.2版本,我们终于全面接入了WebGPU的图形API,这将是非常有意义的一个LayaAir引擎发展新里程。
WebGPU作为现代Web图形标准,具有支持CPU多线程、支持通用计算能力等WebGL所不具备的能力与众多优势。注定要替代WebGL图形标准,主流3D引擎均会陆续接入该标准的API。
从引擎的角度,相较于WebGL,WebGPU提供了更高的性能优化和更低级别的硬件控制,使游戏引擎能够充分利用现代硬件的图形处理能力,这会带来更加出色的图形渲染和计算性能,以及更多基于WebGL无法实现的引擎功能。
当前,尽管WebGPU并没有在所有的平台中支持,但全面的支持已成趋势,我们如今完成接入,是为了未来更加平滑过渡到WebGPU的时代。
如果大家想体验WebGPU的渲染能力,可以在PC端的Chrome浏览器地址栏里输入 chrome://flags
并回车,然后在搜索栏中输入WebGPU,将WebGPU Support的选项设置为Enabled,最后重启Chrome浏览器。
完成浏览器的设置后,再到IDE里将引擎的渲染切换为WebGPU即可。步骤为:项目设置 -> 运行 -> 引擎模块 -> WebGPU(Beta)。
需要注意的是,启用WebGPU后,需要使用HTTPS协议访问,3.2版本已支持该项设置,我们点击顶部的倒三角图标,再点击启动https即可。
设置好环境后,我们对1473万个三角面的5184个PBR材质物体,在不做合并优化的情况下,基于WebGL和WebGPU进行性能测试和对比。
测试环境的浏览器采用Chrome 125.0,CPU为Intel(R) Core(TM) i7-8700,GPU为RTX3090。测试结果显示,同样是5184个DrawCall,1473万三角面,WebGPU的性能相对于WebGL提升了20-25%左右。随着后续WebGPU在接入完成后的进一步优化,应该还有性能提升的空间。
05 3D相关功能的新增
在3D方面,LayaAir3.2中有两个重要的更新,其一是新增了材质缩略图预览,使得开发者可以在IDE中通过缩略图快速识别和选择所需的材质,而无需逐一打开,节省了大量时间,并使得材质的管理更加直观和高效,进一步提升了材质功能的易用性。
另一个重要的更新是在引擎中新增了3D导航寻路相关的功能,并且在IDE中提供了6个3D导航寻路组件,方便开发者使用。
静态导航表面(Nav Mesh Surface)组件用于生成导航网格,导航网格是一种用于寻路和导航的数据结构,它描述了3D环境中角色可以行走的表面。例如,指定哪些区域是可行走的,并根据定义的可行走区域自动生成导航网格。
动态导航表面(Nav Mesh Modifier Surface)组件用于在运行时动态修改导航网格。例如,当需要在游戏运行时动态地向导航网格中添加或移除障碍物时,使用该组件在运行时创建一个区域,该区域会覆盖或修改现有的导航网格。
导航障碍物(Nav Mesh Obstacles)组件用于表示障碍物的组件,当前实现了盒子和圆柱体形状的障碍物。通过在场景中放置障碍物对象,以及设置障碍物的类型与形状,影响导航网格的生成和寻路计算。
代理寻路(Nav Agent)组件是用于控制角色或物体等寻路对象(导航的代理)在导航网格上移动和寻路的组件。该组件是实现寻路对象在复杂环境中自主寻路和移动的关键。
导航区域链接(Nav Mesh Link)是用于连接两个不同导航网格表面的组件。它允许在导航网格之间创建链接,通过指定移动时的起点和终点,使得角色可以在这些链接上移动。这在游戏场景中非常有用,特别是当你有多个不连续的可行走区域时,例如平台、楼层等。
动态区域体积(Nav Mesh Modifier Volume)是用于在体积区域内修改导航网格属性的组件。例如,在场景中定义一个三维区域,开发者可以为该区域设置一个区域标记。例如标记该区域为不可行走时,那么代理在寻路时,则会绕开此区域。
以上这些导航组件功能的推出,进一步提升了开发效率和游戏体验,使得开发者无需从头编写复杂的路径规划算法,让角色能够智能地在复杂3D场景中进行路径选择和动态避障,适用于多种游戏类型。同时还降低了新手的开发门槛。
关于优联前端
武汉优联前端科技有限公司由一批从事前端10余年的专业人才创办,是一家致力于H5前端技术研究的科技创新型公司,为合作伙伴提供专业高效的前端解决方案,合作伙伴遍布中国及东南亚地区,行业涵盖广告,教育, 医疗,餐饮等。有效的解决了合作伙伴的前端技术难题,节约了成本,实现合作共赢。可进行Web前端、微信小程序、小游戏,2D/3D游戏,动画交互与UI广告设计等各种技术研发。
相关文章:
LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎
前言 LayaAir3的每一个分支版本都是一次较大的提升,在3.1彻底完善了引擎生态结构之后,本次的3.2会重点完善全平台发布相关的种种能力,例如,除原有的安卓与iOS系统外,还支持Windows系统、Linux系统、鸿蒙Next系统&#…...
计算机网络(四)网络层
4.1、网络层概述 简介 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来,形成一个更大的互…...
时空笔记:CBEngine(微观交通模拟引擎)
CBEngine 是一个微观交通模拟引擎,可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…...
Apache Sedona和Spark将geojson瓦片化例子
Apache Sedona很方便读取geojson、ShapeFile、geopackage等文件,提供了很多spark sql函数和rdd算子。下面例子主要用于熟悉spark和sedona的使用。 引入的maven包 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.or…...
5种IO模型
目录 一、认识IO二、5种IO模型三、非阻塞IO代码 一、认识IO 什么是IO? Input(输入)和Output(输出)。 冯诺依曼体系结构中,数据从输入设备拷贝到内存,经过处理后,再从内存拷贝到输出设备。现实情况中,数据并不是那么流…...
ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走: 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画,将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…...
面试题
1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 目录下大于10M的文件转移到…...
工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一个接口,用于创建对象,但允许子类决定实例化的类是哪一个。这样,工厂方法模式将对象的创建逻辑委托给子类,从而实现了创建…...
web前端学习总结(一)
web前端使用三项技术:html、css、javascript. 一、html:超文本标记语言,用于展示网页的框架。 <html> <head><title> </title></head><body><div> </div> <!--用于布局,占1行 --><span&g…...
【深度学习入门_基础篇】概率论
开坑本部分主要为基础知识复习,新开坑中,学习记录自用。 学习目标: 随机事件与概率、随机变量及其分布、多维随机变量及其分布、大数定律与中心极限定理。 强烈推荐此视频: 概率论_麻省理工公开课 废话不多说,直接…...
SpringMVC根据url校验权限,防止垂直越权
思路是加一个拦截器,对除登录接口的所有请求进行拦截。拦截到请求后,查询当前用户都拥有哪些url的权限(这个需要权限表有url字段),然后与当前请求的url对比,如果相同则说明有权限,否则没有。 首…...
istio-proxy oom问题排查步骤
1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存,此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高,在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…...
openstack下如何生成centos9 centos10 和Ubuntu24 镜像
如何生成一个centos 10和centos 9 的镜像1. 下载 对应的版本 wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Gener…...
Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0
目录 首先你要定义v8的模型特征文件 下方是完整的模型编写函数 然后你要在控件窗体中定义应用这些方法以及函数 一、定义你的标签 二、下方是定义模块和坐标的方法 三、画框 完整推理函数代码块 效果展示 完整源码 训练其实和yolov10差不多 因为v10就是在v8的基础上做了优…...
C#中序列化的选择:JSON、XML、二进制与Protobuf详解
C#中序列化的选择:JSON、XML、二进制与Protobuf详解 在C#开发中,序列化是将对象转换为可存储或传输的格式的过程,而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...
深入理解 Java 设计模式之策略模式
一、引言 在 Java 编程的世界里,设计模式就如同建筑师手中的蓝图,能够帮助我们构建出更加健壮、灵活且易于维护的代码结构。而策略模式作为一种经典的行为型设计模式,在诸多实际开发场景中都发挥着至关重要的作用。它能够让算法的定义与使用…...
如何快速导出Python包和安装?
pip freeze > requirements.txt导出: 安转 : pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple...
记录一个在增量更新工具类
1. 应用场景 比方说我现在有一个商品,这个商品可以上传图片用来展示,之前已经上传过5张图片 ABCDE,现在其中BC这两张图片不想要了要换成FG,这个时候就可以使用这个工具类进行更新。 在最后一步,可以不管ADE直接只管新增…...
VUE3 常用的组件介绍
Vue 组件简介 Vue 组件是构建 Vue 应用程序的核心部分,组件帮助我们将 UI 分解为独立的、可复用的块,每个组件都有自己的状态和行为。Vue 组件通常由模板、脚本和样式组成。组件的脚本部分包含了各种配置选项,用于定义组件的逻辑和功能。 组…...
UML系列之Rational Rose笔记二:包图
rose绘制包图,有简单的有复杂的; 正常图简单的话,直接新建package使用就行,改变package的大小,改变名称当作不同的包就行;基本没有什么学习难度;在此,笔者直接介绍一下回执标准一点…...
第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法
时间轴: Java反射相关类图解: 反射: 1、什么是 Java 反射 参考: https://xz.aliyun.com/t/9117 Java 提供了一套反射 API ,该 API 由 Class 类与 java.lang.reflect 类库组成。 该类库包含了 Field 、 Me…...
cuda实现flash_attn_mma_share_kv源码分析
一 源码分析 1.1 函数入口 void flash_attn_mma_stages_split_q_shared_kv(torch::Tensor Q, torch::Tensor K, torch::Tensor V, torch::Tensor O, int stages) {CHECK_TORCH_TENSOR_DTYPE(Q, torch::kHalf) // Q [B,H,N,D]CHECK_TORCH_TENSOR_DTYPE(K, torch::kHalf) // K …...
Python操作Excel的库openpyxl使用入门
openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。以下是一些 openpyxl 的基本使用方法: 安装 openpyxl 首先,确保已经安装了 openpyxl。如果没有安装,可以使用以下命令进行安装: pip install openp…...
《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)
《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…...
信息网络安全考试gjdw
序号 一级纲要 二级纲要 题目分类 题型 题干 选项 答案 题目依据 试题分数 试题编码 备注 说明 1 信息安规 \ 专业题库 单选题 根据信息安规规定,试验和推广信息新技术,应制定相应的( ),经本单位…...
S变换matlab实现
S变换函数 function [st,t,f] st(timeseries,minfreq,maxfreq,samplingrate,freqsamplingrate) % S变换 % Code by huasir Beijing 2025.1.10 % Reference is "Localization of the Complex Spectrum: The S Transform" % from IEEE Transactions on Signal Proc…...
【OLAP和PLTP】—— 浅谈两者的应用场景和区别
大家好,我是摇光~ OLAP(Online Analytical Processing)和OLTP(Online Transaction Processing)是两种不同的数据处理技术,分别用于不同的业务场景。以下是关于OLAP和OLTP的详细介绍: 一、OLAP&…...
计算机组成原理(1)王道学习笔记
一、 引言 计算机硬件唯一能识别的数据是二进制-----0/1。 用低/高电平表示0/1。 通过很多条电路,可以传递多个二进制数位。 每个二进制数位称为1bit(比特)。 计算机硬件的基本组成 早期的ENIAC计算机是通过手动接线来控制计算。冯诺依曼首次…...
LLaMA模型:自然语言处理的革新者
引言 在人工智能的领域中,自然语言处理(NLP)是一个充满挑战的分支,它的目标是让计算机能够理解和生成人类语言。Transformer模型,作为NLP的基石,已经极大地推动了这一领域的发展。然而,为了进一…...
各种特种无人机快速发展,无人机反制技术面临挑战
随着科技的飞速发展,各种特种无人机在军事、民用等领域得到了广泛应用,其性能不断提升,应用场景也日益丰富。然而,无人机反制技术的发展确实面临一定的挑战,难以完全跟上无人机技术的快速发展步伐。以下是对这一问题的…...
1555银行账户概要_pandas解答
目录 题目链接(无_力扣VIP_略过)一.读题(建议使用这种表结构_数据对比看)题目SQL Schema & Pandas Schema 建表语句_数据 二.答案_MySQL一图解MySQL一图解__可只需看此!!!!!!!!!!!!!!!!答案-----------------------------------------------------------------------------…...
【C++补充】第一弹---位图技术揭秘:内存优化与快速访问
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1 位图 1.1 位图相关面试题 1.2 位图的设计及实现 1.3 C库中的位图 bitset 1.4 位图的模拟实现 1.5 位图的优缺点 1.6 位图相关考察题目 1 …...
node.js中实现token的生成与验证
Token(令牌)是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中,Token常用于身份验证和授权,确保用户能够安全地访问受保护的资源。 作用与意义 身份验证:Token可以用来验证用户的身份࿰…...
服务器登陆后有java变量
需求:在ssh服务器后,用户root 使用java会报错,没有这个变量,其实环境变量中已经有配置了,在/etc/profile 中有写变量及地址,通过source /etc/profile 命令也可以使环境变量加载上,但是ssh后不会…...
层次模型式的工作流
层次模型式的工作流是一种适合分布式版本控制系统(如 Git、Mercurial)的开发协作方式,它将开发团队分成多个层次,每个层次有明确的角色和职责,代码从底层逐步向上层汇总和集成,最终形成一个完整、稳定的产品…...
Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian
Linux 操作系统有众多发行版(Distros),每个发行版的设计目标、目标用户、应用场景和使用方式有所不同。常见的 Linux 发行版包括 Red Hat、Ubuntu、Kylin 和 Debian。以下是这些发行版的详细介绍与对比,以及它们的应用场景和使用方…...
G1原理—3.G1是如何提升垃圾回收效率
大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…...
IOS界面传值-OC
1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 (1)ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...
C# SQL ASP.NET Web
留学生的课程答疑 按照要求完成程序设计、数据库设计、用户手册等相关技术文档; 要求 1. 计算机相关专业,本科以上学历,至少有1年以上工作经验或实习经历。 2. 熟练掌握WinForm程序开发,或ASP.NET Web编程。 3. 熟悉C#中网络…...
asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?
对于并发请求,每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal,每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的,因此在并发请求时不会互相干扰。 在并发请求时…...
软件23种设计模式完整版[附Java版示例代码]
一、什么是设计模式 设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。 设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们…...
FPGA 20 ,FPGA按键消抖功能解析与实现
目录 前言 一. 具体场景 二. 消抖方法...
基于单片机的无线气象仪系统设计(论文+源码)
1系统方案设计 如图2.1所示为无线气象仪系统设计框架。系统设计采用STM32单片机作为主控制器,结合DHT11温湿度传感器、光敏传感器、BMP180气压传感器、PR-3000-FS-N01风速传感器实现气象环境的温度、湿度、光照、气压、风速等环境数据的检测,并通过OLED1…...
OA系统如何做好DDOS防护
OA系统如何做好DDOS防护?在数字化办公蔚然成风的当下,OA(办公自动化)系统作为企业内部管理与协作的神经中枢,其安全性和稳定性直接关系到企业的日常运营效率、信息流通效率以及长远发展。OA系统不仅承载着企业内部的日…...
java_单例设计模式
什么是设计模式 什么是单例设计模式 单例设计模式——饿汉式 虽然你没有使用这个对象实例,但是它也帮你创建了!容易造成对象的浪费 對象,通常是重量級的對象, 餓漢式可能造成創建了對象,但是沒有使用. package com.hspedu.singl…...
比较分析:Windsurf、Cody、Cline、Roo Cline、Copilot 和 通义灵码
随着人工智能技术的快速发展,开发者工具变得越来越智能化,特别是在代码生成、辅助编程等领域,市面上涌现了多种 AI 驱动的工具。本文将从开源性、集成能力、功能覆盖范围、支持的编程语言、生态兼容性、成本、学习曲线、响应速度、离线支持以…...
vue3后台系统动态路由实现
动态路由的流程:用户登录之后拿到用户信息和token,再去请求后端给的动态路由表,前端处理路由格式为vue路由格式。 1)拿到用户信息里面的角色之后再去请求路由表,返回的路由为tree格式 后端返回路由如下: …...
C#版 软件开发6大原则与23种设计模式
开发原则和设计模式一直是软件开发中的圣经, 但是这仅仅适用于中大型的项目开发, 在小型项目的开发中, 这些规则会降低你的开发效率, 使你的工程变得繁杂. 所以只有适合你的才是最好的. 设计模式六大原则1. 单一职责原则(Single Responsibility Principle࿰…...
后端Java开发:第十三天
第十三天:继承 - 面向对象的核心概念 欢迎来到第十三天的学习!今天,我们将深入探讨 Java 中的 继承(Inheritance),这是面向对象编程的四大基本特性之一。继承是指一个类(子类)通过继…...
awr报告无法生成:常见分析手段
awr报告无法生成:常见分析手段 STATISTICS_LEVEL和OPEN_MODEAWR快照是否能自动生成?AWR快照能否手动生成?日志有无ORA-12751或ORA-32701报错?MMON进程是否被挂起?排查数据库隐藏参数分析快照生成错误信息分析AWR Snapshot Tracing分析AWR Table Flush是否超时STATISTICS_L…...