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

Unity 几种主流的热更新方式

一、AssetBundle 资源热更

核心原理

  • 将游戏资源打包为 AssetBundle 文件

  • 运行时动态加载更新的 AssetBundle

实现步骤

  1. 资源标记:在 Unity Editor 中设置资源的 AssetBundle 属性

  2. 打包生成:使用 BuildPipeline.BuildAssetBundles 生成 AB 包

  3. 版本管理:维护资源版本号及 MD5 校验信息

  4. 差异比对:客户端与服务端版本对比确定需更新文件

  5. 下载更新:从 CDN 下载差异文件

  6. 加载使用:运行时加载更新后的 AssetBundle

代码示例

// 加载热更资源示例
IEnumerator LoadHotUpdateAsset(string bundleName, string assetName)
{string path = Path.Combine(Application.persistentDataPath, bundleName);// 优先检查热更目录if(!File.Exists(path)){path = Path.Combine(Application.streamingAssetsPath, bundleName);}AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);yield return request;if(request.assetBundle != null){AssetBundleRequest assetRequest = request.assetBundle.LoadAssetAsync<GameObject>(assetName);yield return assetRequest;if(assetRequest.asset != null){Instantiate(assetRequest.asset as GameObject);}request.assetBundle.Unload(false);}
}

适用场景

  • 非代码资源更新(预制体、纹理、配置表等)

  • 所有 Unity 支持平台

二、Lua 脚本热更

核心原理

  • 使用 Lua 作为逻辑脚本语言

  • 通过 Lua 虚拟机执行热更逻辑

  • C# 与 Lua 通过交互层通信

主流方案

  1. xLua(腾讯开源)

    • 特性:零成本集成、高性能

    • 优势:支持全平台、完善的 IDE 调试支持

  2. ToLua

    • 特性:成熟稳定、社区资源丰富

    • 优势:自动生成绑定代码

实现架构

C# 核心框架层(不可热更)↓↑
C#-Lua 桥接层(不可热更)↓↑
Lua 业务逻辑层(可热更)
-- Lua 热更逻辑示例
local Player = {}function Player:new()local o = { hp = 100, attack = 10 }setmetatable(o, self)self.__index = selfreturn o
endfunction Player:TakeDamage(dmg)self.hp = self.hp - dmgif self.hp <= 0 thenself:Die()end
endreturn Player

适用场景

  • 需要频繁更新的游戏逻辑

  • MMO、卡牌等复杂业务型游戏

  • iOS 等限制 JIT 的平台

三、ILRuntime 热更方案

核心原理

  • 使用 C# 编写热更代码

  • 通过 IL 解释执行实现热更

  • 无需学习 Lua,保持 C# 开发体验

关键特性

  • 完整的 C# 热更支持

  • 跨平台 CLI 实现

  • 支持 VS 调试(需插件)

实现步骤

  1. 将热更代码编译为 DLL

  2. 将 DLL 作为资源打包

  3. 运行时通过 ILRuntime 加载执行

代码示例

// 主工程加载热更代码
void Start()
{StartCoroutine(LoadHotfixDLL());
}IEnumerator LoadHotfixDLL()
{// 从持久化路径加载更新后的DLLstring dllPath = Path.Combine(Application.persistentDataPath, "Hotfix.dll");if(!File.Exists(dllPath)){dllPath = Path.Combine(Application.streamingAssetsPath, "Hotfix.dll");}byte[] dllBytes = File.ReadAllBytes(dllPath);// 初始化ILRuntimevar appDomain = new ILRuntime.Runtime.Enviorment.AppDomain();using(var fs = new MemoryStream(dllBytes)){appDomain.LoadAssembly(fs);}// 调用热更代码appDomain.Invoke("Hotfix.GameMain", "Start", null, null);
}

适用场景

  • 希望保持纯 C# 开发的项目

  • 需要热更复杂业务逻辑

  • 对 Lua 语法不适应的团队

四、HybridCLR(原 Huatuo)

核心原理

  • 基于 Unity IL2CPP 的增强方案

  • 实现完整的 AOT+Interpreter 混合执行

  • 真机全平台支持

技术优势

  • 完整支持 C# 所有特性

  • 近乎原生执行的性能

  • 完美兼容现有 IL2CPP 工作流

实现流程

  1. 编译热更程序集为 DLL

  2. 生成补充元数据(AOT dll)

  3. 打包为 AssetBundle

  4. 运行时加载并解释执行

代码示例

// HybridCLR 热更加载
void LoadHotfix()
{// 加载补充元数据AssetBundle aotDllAB = AssetBundle.LoadFromFile("AOTDlls");TextAsset dllBytes = aotDllAB.LoadAsset<TextAsset>("GameAssembly");RuntimeApi.LoadMetadataForAOTAssembly(dllBytes.bytes);// 加载热更DLLAssetBundle hotfixAB = AssetBundle.LoadFromFile("Hotfix");TextAsset hotfixDll = hotfixAB.LoadAsset<TextAsset>("Hotfix.dll");Assembly hotfixAssembly = Assembly.Load(hotfixDll.bytes);// 调用热更入口Type gameMain = hotfixAssembly.GetType("Hotfix.GameMain");MethodInfo startMethod = gameMain.GetMethod("Start");startMethod.Invoke(null, null);
}

适用场景

  • 需要完整 C# 热更能力的项目

  • 对性能要求较高的游戏

  • 使用 IL2CPP 打包的 iOS 项目

五、Addressable Assets 系统

核心原理

  • Unity 官方资源管理系统

  • 基于 AssetBundle 的增强方案

  • 提供更高级的资源管理抽象

核心特性

  • 异步加载接口

  • 自动依赖管理

  • 内置更新机制

  • 可视化配置工具

代码示例

// 加载Addressable资源
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;void LoadCharacter()
{Addressables.LoadAssetAsync<GameObject>("PlayerPrefab").Completed += (AsyncOperationHandle<GameObject> handle) => {if(handle.Status == AsyncOperationStatus.Succeeded){Instantiate(handle.Result);}};
}

适用场景

  • 需要简化 AssetBundle 管理的项目

  • 大型项目资源管理

  • 与 Unity 编辑器深度集成的需求

六、各方案对比分析

方案开发语言性能iOS支持上手难度维护成本
AssetBundleC#支持中等
LuaLua支持
ILRuntimeC#中-低支持中等
HybridCLRC#支持中等
AddressablesC#支持

七、选型建议

  1. 纯资源热更:AssetBundle 或 Addressables

  2. 逻辑热更需求

    • 中小项目:Lua 方案(xLua)

    • 大型项目:HybridCLR + AssetBundle

    • 全 C# 需求:ILRuntime 或 HybridCLR

  3. iOS 项目:优先考虑 HybridCLR 或 Lua

  4. 团队技术栈

    • 熟悉 Lua:选择 xLua

    • 纯 C# 团队:HybridCLR

八、热更新系统设计要点

  1. 版本控制系统

    • 资源版本管理

    • 差异更新机制

    • 版本回滚能力

  2. 安全机制

    • 文件校验(MD5/SHA)

    • 资源加密

    • 下载安全(HTTPS)

  3. 更新策略

    • 强制更新与可选更新

    • 后台静默下载

    • 增量更新机制

  4. 性能优化

    • 资源分包策略

    • 加载优先级管理

    • 内存占用监控

九、典型热更新架构示例

[客户端]├─ 持久化数据目录(热更资源)├─ 本地版本信息├─ 更新管理器│    ├─ 版本检查│    ├─ 差异比对│    ├─ 资源下载│    └─ 校验机制└─ 资源加载系统├─ AssetBundle 加载├─ Lua 虚拟机└─ ILRuntime/HybridCLR 环境[服务端]├─ 版本管理服务├─ 资源CDN分发└─ 更新配置接口

选择合适的热更新方案需要综合考虑项目规模、目标平台、团队技术栈和长期维护成本等因素。随着 Unity 技术发展,HybridCLR 和 Addressables 等新方案正在成为行业新趋势。

相关文章:

Unity 几种主流的热更新方式

一、AssetBundle 资源热更 核心原理 将游戏资源打包为 AssetBundle 文件 运行时动态加载更新的 AssetBundle 实现步骤 资源标记&#xff1a;在 Unity Editor 中设置资源的 AssetBundle 属性 打包生成&#xff1a;使用 BuildPipeline.BuildAssetBundles 生成 AB 包 版本管…...

小结:ipsec-ike

IPSec 手动配置与自动配置&#xff08;IKE动态协商&#xff09; 手动配置IPSec 逻辑图 #mermaid-svg-eNMnNEwnoTjF8fkV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-eNMnNEwnoTjF8fkV .error-icon{fill:#552222;}…...

基于大模型预测的输尿管癌诊疗全流程研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测输尿管癌的原理与方法 2.1 大模型技术概述 2.2 用于输尿管癌预测的大模型选择 2.3 数据收集与处理 2.4 模型训练与优化 三、术前风险预测与手术方案制定 3.1 术前风险预测指标 3.2 大模型预测…...

Python Cookbook-6.14 实现状态设计模式

任务 你希望你程序中的某个对象能在不同的“状态”之间切换&#xff0c;而且该对象的行为方式也能随着状态的变化而变化。 解决方案 状态设计模式的关键思路是将“状态”(带有它自身的行为方式)对象化&#xff0c;使其成为一个类实例(带有一些方法)。在Python中&#xff0c;…...

2025智能体的发展趋势

以下是2025年智能体的一些主要发展趋势&#xff1a; 技术能力提升 多模态融合深化&#xff1a;智能体将能够更加自然地处理和理解多种模态的数据&#xff0c;如文本、图像、语音、视频等&#xff0c;实现跨模态的感知、理解和生成。这将使智能体在复杂场景下的应用更加广泛和…...

PCA主成分分析法(最大投影方差,最小重构距离,SVD角度)

统计分析中&#xff0c;数据的变量之间可能存在相关性&#xff0c;以致增加了分析的难度。于是&#xff0c;考虑由少数不相关的变量来代替相关的变量&#xff0c;用来表示数据&#xff0c;并且要求能够保留数据中的大部分信息。 在信号处理领域,信号具有较大方差,噪声具有较小…...

《数据结构初阶》【顺序表/链表 精选15道OJ练习】

《数据结构初阶》【顺序表/链表 精选15道OJ练习】 前言&#xff1a;---------------顺序表OJ练习---------------[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)题目介绍方法一&#xff1a; [27. 移除元素](https://leetco…...

Python协程入门指北

一、什么是协程&#xff1f; 协程&#xff08;Coroutine&#xff09;就像可以暂停执行的函数&#xff0c;能够在执行过程中主动让出控制权&#xff0c;等准备好后再继续执行。 生活小例子 想象你在咖啡店排队&#xff1a; 普通函数&#xff1a;必须一直排到取餐&#xff08…...

Nginx 核心功能02

目录 一、引言 二、正向代理 &#xff08;一&#xff09;正向代理基础概念 &#xff08;二&#xff09;Nginx 正向代理安装配置 &#xff08;三&#xff09;正向代理配置与验证 三、反向代理 &#xff08;一&#xff09;反向代理原理与应用场景 &#xff08;二&#xf…...

c++题目_P1027 [NOIP 2001 提高组] Car 的旅行路线

P1027 [NOIP 2001 提高组] Car 的旅行路线 - 洛谷 # P1027 [NOIP 2001 提高组] Car 的旅行路线 ## 题目描述 又到暑假了&#xff0c;住在城市 A 的 Car 想和朋友一起去城市旅游。 她知道每个城市都有 $4$ 个飞机场&#xff0c;分别位于一个矩形的 $4$ 个顶点上&#xff0c…...

【playwright】内网离线部署playwright

背景&#xff1a;安装好python3.9后&#xff0c;由于内网无法使用pip安装playwright&#xff0c;多方收集资料&#xff0c;终于部署完成&#xff0c;现汇总如下&#xff1a; 1、playwright需要python3.7以上的版本&#xff0c;如果低于这个版本先要将python解释器升级 2、在可…...

前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制

看完本篇你将基本了解webpack!!! 目录 一、Webpack 的作用 1、基本配置结构 2、配置项详解 1. entry —— 构建入口 2. output —— 输出配置 3. mode:模式设置 4. module:模块规则 5. plugins:插件机制 6. resolve:模块解析配置(可选) 7. devServer:开发服务器…...

ES6函数、对象和面向对象扩展

函数扩展 默认参数 通用的写法&#xff1a; function func(a, b, ..., c 默认值c, d 默认值d, ...) {... }其中&#xff0c;需要注意的是&#xff0c;有默认值的尽量写在后面并且所有形参参数不允许重复申明。具体例子&#xff1a; function test() {return 13 }// 函数可…...

航空客户价值分析阶段性测验

航空公司客户价值分析 学习目标 学会怎么进行数据分析。掌握hive的使用方法。学会数据清洗和K-Means聚类算法。 了解航空公司现状与客户价值分析 任务描述 面对激烈的市场竞争,各个航空公司都推出了更多的优惠来吸引客户。国内某航空公司面临着常旅客流失&#xff0c;竞争…...

纯html实现的json数据转csv文件

代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JSON转CSV转换器</tit…...

Windows 查看电脑是否插拔过U盘

1、按 “WinR” 组合键打开 “运行” 对话框&#xff0c;输入 “regedit” 并回车&#xff0c;打开注册表编辑器。 2、依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR注册表项&#xff0c;这里记录了所有已连接过的 USB 设备信息&#xff0c;包括 U 盘&am…...

VB.net序列化和反序列化的使用方法和实用场景

引言 相信很多初学编程的人都会提出过这个疑问&#xff1a;“既然我的变量可以存在内存之中&#xff0c;那么是否也可以存在硬盘之中呢” 其实我想回答的是&#xff0c;完全可以而且方法不止一种&#xff0c;而今天讲的是序列化最经典的——二进制序列化 由于序列化的部分已…...

kafka学习笔记(四、生产者(客户端)深入研究(二)——消费者协调器与_consumer_offsets剖析)

1.消费者协调器和组协调器 如果消费者客户端中配置了多个分配策略&#xff0c;则多消费者的分区分配交由消费者协调器和组协调器来完成&#xff0c;他们之间使用一套组协调协议进行交互。 1.1.在均衡原理 将全部消费者分成多个子集&#xff0c;每个消费者组的子集在服务中对…...

stm32基础001(串口)

文章目录 通信的基本概念串行通信和并行通信单工&#xff0c;半双工和全双工串口的硬件连接 stm32的串口原理图CPU的芯片手册stm32串口的库函数实现通过串口实现printf函数使用中断实现串口的接收 通信的基本概念 串行通信和并行通信 串行通信一个方向只有一个数据通道&#x…...

5G技术如何提升智能家居体验:让家更聪明,生活更智能

5G技术如何提升智能家居体验&#xff1a;让家更聪明&#xff0c;生活更智能 一、引言&#xff1a;智能家居的新纪元 近年来&#xff0c;智能家居已经逐渐走入我们的生活&#xff0c;家电、照明、安全设备、环境监控等产品&#xff0c;都在逐步实现智能化&#xff0c;让我们可以…...

在项目中如何对Map List等对象序列化及反序列化

我们知道&#xff0c;在自定义类中&#xff0c;若想完成序列化必须要实现Serializable接口。 那么在实现后如何进行序列化呢&#xff1f; 一.普通对象 序列化&#xff1a; 1.首先我们要定义一个 序列化所需要的工具类 ObjectMapper //定义序列化所需要的工具类 转化机器…...

指针与算法的双人舞:蓝桥杯两道趣味题的降维打击

蓝桥杯奇趣挑战&#xff1a;如何用指针和算法“驯服”无序数组与环形迷宫&#xff1f; &#x1f3a9; 博客引言 "你是否有过这样的体验&#xff1f;面对一段看似混乱的数组&#xff0c;像解开一团纠缠的耳机线&#xff0c;想用最优雅的方式让它乖乖听话&#xff1f;又或者…...

C语言 指针(2)

目录 1.指针运算 2.const修饰指针 3.野指针 我们在上篇文章中初步了解了关于指针的基础内容&#xff0c;包括内存地址以及指针变量类型。这篇我们来 讲关于指针的运算以及const修饰指针和野指针相关内容。 1. 指针运算 指针的基本运算有三种&#xff0c;分别是: - 指针-…...

使用Python和Pandas实现的Azure Synapse Dedicated SQL pool权限检查与SQL生成用于IT审计

下面是使用 Python Pandas 来提取和展示 Azure Synapse Dedicated SQL Pool 中权限信息的完整过程&#xff0c;同时将其功能以自然语言描述&#xff0c;并自动构造所有权限设置的 SQL 语句&#xff1a; ✅ 步骤 1&#xff1a;从数据库读取权限信息 我们从数据库中提取与用户、…...

Python基本语法(控制语句)

#控制语句 Python语言的控制语句和其他编程语言类似&#xff0c;常用的有if…else、while、for语句。 案例2一7控制语句 第1组代码&#xff0c;说明if-else语句&#xff1a; #1 print(\n1,if) x,y,z10,20,5 if x>y:print(x>y) else:print(x<y)输出结果: 1,if x<…...

Linux btop 使用教程

简介 btop 是一个基于终端的现代系统资源监控器&#xff0c;具有美观的图形界面、响应快、功能丰富等特点。它支持查看 CPU、内存、磁盘、网络、进程&#xff0c;并可以方便地筛选和管理进程。 功能总览 启动命令&#xff1a; btop界面分为以下几部分&#xff1a; CPU 区域…...

高并发场景下的MySQL生存指南

引言 在2025年全球数字经济峰会上&#xff0c;阿里云披露其核心交易系统单日处理请求量突破万亿次&#xff0c;其中MySQL集群承载了78%的OLTP业务。这标志着数据库系统已进入百万级QPS时代&#xff0c;传统优化手段面临三大挑战&#xff1a; 一、硬件与架构优化&#xff1a;构…...

Ethan独立开发产品日报 | 2025-04-30

1. Daytona 安全且灵活的基础设施&#xff0c;用于运行你的人工智能生成代码。 Daytona Cloud重新定义了AI代理的基础设施&#xff0c;具备低于90毫秒的启动时间、原生性能和有状态执行能力&#xff0c;这些是传统云服务无法比拟的。您可以以前所未有的速度和灵活性来创建、管…...

Mysql常用函数解析

字符串函数 CONCAT(str1, str2, …) 将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World​​SUBSTRING(str, start, length) 截取字符串的子串&#xff08;起始位置从1开始&#xff09;。 SELECT SUBSTRING(MySQL, 3, 2); -- 输出: SQ…...

donet使用指定版本sdk

ps:来自微软官方方案,实测可行,就是在项目任意目录下在新建 global.json,并配置sdk版本 SDK 使用最新安装的版本 SDK 命令包括 dotnet new 和 dotnet run。 .NET CLI 必须为每个 dotnet 命令选择一个 SDK 版本。 即使在以下情况下&#xff0c;它也会默认使用计算机上安装的最新…...

Android短信监控技术实现:合法合规的远程采集方案

一年经验的全栈程序员&#xff0c;目前头发健在&#xff0c;但不知道能撑多久。 该项目已成功部署并稳定运行于企业生产环境&#xff0c;如需个性化定制方案&#xff0c;欢迎联系作者进行深度合作。 文章目录 前言 一、页面设计 1.页面显示 2.代码实现 二、具体代码实现 1.添加…...

前端项目实践:打造响应式个人简历与实时天气预报应用

在当今前端开发领域&#xff0c;构建实际项目是提升技能的最佳方式。本文将带你完成两个极具实用价值的前端项目&#xff1a;响应式个人简历页面和天气预报Web应用。这两个项目不仅能够丰富你的作品集&#xff0c;还能帮助你掌握现代前端开发的核心技术。 一、响应式个人简历页…...

【C++】extern

本文介绍一些extern在C中的用法 声明与定义分离 C程序员应该都知道单一定义规则ODR 在任何一个翻译单元中&#xff0c;只允许存在任何变量、函数、类类型、枚举类型 、概念 (自 C20 起) 或模板的一个定义&#xff08;其中一些可能具有多个声明&#xff0c;但只允许一个定义&a…...

力扣——23合并升序链表

目录 1:题目描述&#xff1a; 2.算法思想&#xff1a; 3.代码展示&#xff1a; 1:题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff…...

Java 泛型参数问题:‘ResponseData.this‘ cannot be referenced from a static contex

问题与处理策略 问题描述 Data AllArgsConstructor NoArgsConstructor public class ResponseData<T> {private Integer code;private String msg;private T data;public static final int CODE_SUCCESS 2001;public static final int CODE_FAIL 3001;public static …...

21 课时精通生成式 AI:微软官方入门指南详解

21课时精通生成式AI&#xff1a;微软官方入门指南详解 引言项目概述分析基本信息项目定位与目标 核心功能详解1. 全面的课程结构2. 多样化的学习内容3. 技术亮点与创新点 安装和使用教程环境要求安装步骤基本使用方法示例代码 应用场景和实际价值适用业务场景实际应用价值效益可…...

WPF嵌入webapi服务器,充当微服务角色

WPF嵌入WebAPI服务器实现微服务角色 一、方案概述 在WPF应用程序中嵌入WebAPI服务器,使其能够同时作为桌面客户端和微服务提供者。这种架构允许WPF应用既作为用户界面,又作为后端服务,适合需要本地处理能力同时又能提供API接口的场景。 二、技术选型 ​​WebAPI框架​​:…...

构建现代分布式云架构的三大支柱:服务化、Service Mesh 与 Serverless

目录 前言1. 服务化架构模式&#xff1a;构建可扩展的基础单元1.1 服务化的定义与演进1.2 在分布式云中的价值1.3 面临的挑战 2. Service Mesh 架构&#xff1a;服务通信的治理中枢2.1 什么是 Service Mesh&#xff1f;2.2 功能与优势2.3 在分布式云中的角色2.4 落地难点 3. Se…...

2025华东杯数学建模B题完整分析论文(共36页)(含模型、代码、数据)

2025华东杯数学建模B题完整分析论文 摘要 一、问题重述 二、问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1代码 4.1.4问题1求解结果 4.2问题2 4.2.1问题2思路分析 4.2.2问题2模型建立 4.2…...

K8S - 零基础掌握 RBAC - 命名空间安全实战

一、为什么需要 RBAC 权限管理&#xff1f; 真实场景 在企业级 K8S 集群中&#xff0c;不同团队共享同一集群&#xff0c;容易发生权限管理问题&#xff0c;例如&#xff1a; 测试人员误删了生产数据库。 实习生看到了财务系统的敏感配置。 核心需求 确保不同用户 只能在自…...

OpenGL-ES 学习(13) ---- Shader 编译和程序对象

目录 概述创建和编译Shader链接程序对象绘制一个最简单的三角形示例代码 概述 在本节中&#xff0c;我们提供创建 Shader对象&#xff0c;并且编译链接到一个程序对象的完整流程&#xff0c;主要内容如下&#xff1a; Shader 和程序对象概述创建和编译Shader创建和链接程序对…...

今天的python练习题

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 晚上8点到的&#xff0c;还是会被感动到&#xff0c;有一位列车员同志在检票期间&#xff0c;叫我到列车员专座位上去坐&#xff0c;我很感激他&#xff0c;温暖人心&#xff0c;所以人间填我…...

HarmonyOS应用开发中实现本地化存储的几种方式

Preferences 存储 适用于存储简单的键值对数据&#xff0c;如用户设置、配置信息等。其特点是轻量级、使用简单&#xff0c;适合频繁读取和少量更新的场景&#xff0c;数据存储在本地沙盒中&#xff0c;应用重启后数据保持不变。 获取 Preferences 实例 &#xff1a;使用 data…...

【C++指南】vector(三):迭代器失效问题详解

. &#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 文章目录 一、引言二、reserve 扩容引发的迭代器失效2.1 问题现象2.2 正确实现 三、insert 插入引发的…...

Android面试总结之GC算法篇

一、GC 机制核心原理与算法 面试题 1&#xff1a;Android 中为什么采用分代回收&#xff1f;分代策略如何优化 GC 效率&#xff1f; 标准答案&#xff1a; 分代回收基于对象生命周期的差异&#xff0c;将堆分为年轻代&#xff08;Young Gen&#xff09;和老年代&#xff08;Ol…...

驱动开发系列55 - Linux Graphics QXL显卡驱动代码分析(二)显存管理

一:概述 前面介绍了当内核检测到匹配的PCI设备后,会调用 qxl_pci_probe 初始化设备,其中会调用qxl_device_init 来初始化设备,为QXL设备进行内存映射,资源分配,环形缓冲区初始化,IRQ注册等操作,本文展开说说这些细节,以及介绍下QXL的显存管理。 二:QXL设备初始化细节…...

javaScript——DOM续(六)

滚轮事件 在 Web 开发中监听鼠标滚轮事件时&#xff0c;不同浏览器存在差异。下面是对 onmousewheel、DOMMouseScroll 和标准 wheel 事件的完整说明和兼容写法。 &#x1f300; onmousewheel 事件概览 onmousewheel 是早期浏览器&#xff08;如 IE 和 Chrome&#xff09;支持…...

MySQL 服务搭建

&#x1f4a2;欢迎来到张翊尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 在线安装Ubuntu/Debian更新系统包索引安装 MySQL …...

Eigen的使用

https://github.com/PX4/eigen Eigen在Qt中的配置&#xff08;博主亲测&#xff09; 1、Qt中调用 //.pro中-------- INCLUDEPATH \$$PWD/eigen-master//.cpp中------- #include <Eigen/Dense> using namespace Eigen;Matrix2d a; MatrixXd b(2,2); Vector3d v(1,2,3);…...

【云原生】基于Centos7 搭建Redis 6.2 操作实战详解

目录 一、前言 二、Redis 6.2 安装过程 2.1 下载安装包 2.2 安装包解压 2.3 安装包编译 2.3 安装 2.4 启动redis 2.4.1 前台启动&#xff08;不推荐&#xff09; 2.4.2 后启动&#xff08;推荐&#xff09; 2.4.3 关闭redis服务 2.4.4 设置客户端连接 三、写在最后 …...