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

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler)

性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策,并确认所做的优化是否产生预期结果。

默认情况下,性能分析器记录并保留游戏的最后 300 帧,并显示有关每一帧的详细信息。可以在 Preferences 窗口(菜单:__File > Preferences__)中增加其记录的帧数(至多 2,000 帧)。注意:如果将此设置增加到很大的帧数,则性能分析器的开销和内存使用量可能产生更大的性能影响。

可以检查脚本代码,以及应用程序如何使用某些资源(这可能会降低应用程序速度)。还可以比较应用程序在不同设备上的性能。性能分析器具有几个不同的性能分析器模块,这些模块可以添加到性能分析会话中,从而获取有关渲染、内存和音频等方面的更多信息。

Profiler 窗口布局

  • A:性能分析器模块。这是可以在应用程序中接受性能分析的所有模块的列表。使用此区域顶部的下拉菜单可以在窗口中添加和删除模块。
  • B:性能分析器控件。使用这些控件可以设置要从哪个设备进行性能分析以及 Unity 应该执行哪种性能分析,可以在帧之间进行导航,还可以开始记录数据。
  • C:帧图表。此区域包含性能分析器进行性能分析的每个模块的图表。首次打开性能分析器时,该区域为空白;开始对应用程序进行性能分析时,该区域中将填充信息。
  • D:模块详细信息面板。此窗口区域中的信息根据所选择的模块而异。例如,选择 CPU Usage Profiler 模块时,此区域包含详细的Timeline时间轴和切换到 Hierarchy 视图的选项。选择 Rendering Profiler 模块时,此区域显示调试信息列表。首次打开性能分析器时,该区域为空白;开始对应用程序进行性能分析时,该区域中将填充信息。

A性能分析器模块

Profiler 窗口的顶部被分为几个性能分析器模块,这些模块对游戏的特定方面进行性能分析。对应用程序进行性能分析时,Unity 在相应图表中显示与每个模块相关的数据。

CPU Usage 模块最能够体现应用程序在每帧中花费的时间。其他模块收集更具体的数据,有助于检查更具体的方面或监测应用程序的重要信息,例如内存消耗、渲染或音频统计信息。

每个模块都有自己的图表。选择模块时,模块详细信息面板将显示在窗口的底部,可用于检查该模块收集的详细数据。

性能分析器模块功能
CPU Usage概要显示应用程序在哪些方面花费最多时间(涉及物理、脚本、动画和垃圾收集等多个方面)。该模块包含有关应用程序的大量性能分析信息,您可以使用这些信息来决定进一步使用哪些其他模块来调查应用程序中的更具体问题。该模块始终处于激活状态(即使您将其关闭)。请参阅 CPU Usage Profiler 模块
GPU Usage显示与图形处理有关的信息。默认情况下,此模块处于非激活状态,因为它的开销较大。请参阅 GPU Usage Profiler 模块。
渲染显示有关 Unity 如何在应用程序中渲染图形的信息,包括有关静态和动态批处理、SetPass 和 Draw 调用、三角形和顶点的信息。请参阅 Rendering Profiler 模块。
Memory显示有关 Unity 如何在应用程序中分配内存的信息。这尤其适合用于查看脚本分配 (GC.Alloc) 如何引起垃圾收集或者是应用程序的资源内存使用量随时间变化的趋势。请参阅 Memory Profiler 模块。
Audio显示应用程序中的音频相关信息,例如何时播放音频源以及播放的音频源数量、音频系统需要的 CPU 使用率以及 Unity 为其分配的内存量。请参阅 Audio Profiler 模块。
Video显示应用程序中的视频相关信息。请参阅 Video Profiler 模块。
Physics显示应用程序中物理引擎已进行的物理处理的相关信息。请参阅 Physics Profiler 模块。
Physics (2D)与 Physics Profiler 模块类似,此模块显示应用程序中物理引擎已进行的 2D 物理处理的相关信息。
Network Messages
(已弃用)
显示有关多玩家高级 API 发送或接收的较低级数据包和消息的信息。
注意:多玩家高级 API 已被弃用。
Network Operations
(已弃用)
显示有关多玩家高级 API 发送和接收的消息中含有哪些类型或操作的详细信息,例如已传输的 SyncVar 或命令的数量。
注意:多玩家高级 API 已被弃用。
UI显示有关 Unity 如何为应用程序处理 UI 批处理的信息,包括 Unity 为何以及如何对项目进行批处理。请参阅 UI Profiler 模块。
UI Details与 UI 模块类似,此模块的图表添加有关批处理和顶点计数的数据,以及标记(包含有关触发 UI 变化的用户输入事件的信息)。
Global Illumination显示有关 Unity 在应用程序中的全局光照 (Global Illumination) 光照子系统中花费的 CPU 资源的信息。请参阅 Global Illumination Profiler 窗口。
性能分析器模块开销

某些性能分析器模块具有大量的数据收集开销,例如 GPU、UI 和 Audio Profiler 模块。为了防止这些模块影响应用程序的性能,可以通过在 Profiler Module 下拉选单中取消选择这些模块来将它们停用。这样可从窗口删除模块,让性能分析器停止收集该模块的数据,并减少性能分析器的开销。

这不适用于 CPU Usage 模块,该模块始终会收集数据(即使该模块处于非激活状态),因为其他模块依赖这些数据。

要添加模块,请选择 Profiler Module 下拉选单,然后选择要激活的性能分析器。从下拉选单选择性能分析器模块后,这个模块开始收集数据,但是在非激活时段内不显示任何数据。

为了避免 GPU Profiler 模块的开销,默认情况下该模块处于非激活状态。GPU Profiler 模块必须在应用程序启动时处于激活状态,才能挂接到图形驱动程序。如果稍后添加,在大多数平台上均无效,并且性能分析器显示消息:“GPU profiling is not supported by the graphics card driver (or it was disabled because of driver bugs)”。

如果您指示性能分析器收集数据并通过 Profiler.logFile API 而不是通过 Profiler 窗口将数据发送到磁盘,您可以通过 Profiler.SetAreaEnabled() 来关闭性能分析器模块。

某些通过外部 IDE 来调试脚本的设置也可能产生开销。为了避免发生此开销并获得更准确的测量值,请禁用 Editor Attaching 设置(菜单:__Preferences > External Tools__)。同样,对构建播放器进行性能分析时,请打开 Build Settings 并禁用 Script Debugging 以避免发生此开销。

B性能分析器控件

性能分析器控件位于 Profiler 窗口顶部的工具栏中。使用这些控件可开始或停止记录性能分析器数据以及浏览分析的帧。

控件功能
Attach to Player选择对应用程序进行性能分析时所在的目标。默认设置为 Playmode。也可以选择 Editor 以对 Unity Editor 进行性能分析并显示 Editor 当前在使用的资源。

Unity 还自动检测网络上正在运行或通过 USB 连接的所有设备,并将这些设备显示在下拉选单中。单击下拉选单中的 Enter IP 可手动输入设备的 IP 地址,以便在该设备上对应用程序进行性能分析。有关更多信息,请参阅应用程序性能分析。
Record启用此设置可以在运行应用程序时记录活跃模块的性能分析信息。如果未启用此按钮,则在运行应用程序时,性能分析器不会收集任何数据。
Back arrow向后导航一帧。
Forward arrow向前导航一帧。
Current Frame单击 Current Frame 按钮时,帧指示线会跳到最后记录的帧,并且性能分析器进入 Current Frame 模式。性能分析器在此模式下收集数据时,它会停留在当前帧上并实时显示收集的数据。再次单击该按钮将退出 Current Frame 模式。
Frame number指示当前在性能分析器中查看的帧的编号。
Clear从 Profiler 窗口擦除所有数据。
Clear on Play启用此设置后,下次单击 Player 窗口中的 Play 或连接到新的目标设备时,可从 Profiler 窗口擦除所有数据。
Deep Profile启用此设置可对所有 C# 方法进行性能分析。启用此设置后,Unity 会将检测功能添加到所有 Mono 调用,然后便可以对脚本进行更详细的调查。请参阅深度性能分析。
Call Stacks要记录用于脚本内存分配的调用栈,请单击此开关。启用此选项时,性能分析器记录的帧具有 GC.Alloc 样本中的信息;即使在 Deep Profile 未激活的情况下,完整调用栈上的这些样本也会导致托管脚本分配。有关更多信息,请参阅“CPU Usage Profiler 模块”页面的分配调用栈部分。
Load将已保存的性能分析器数据加载到 Profiler 窗口中。还可以加载播放器通过 Profiler.logFile API 写出到文件的二进制性能分析数据。

按住 Shift 按钮并单击 Load 按钮可将文件内容附加到当前性能分析帧。
Save将性能分析器数据保存到 Project 文件夹中的 .data 文件中。
上下文菜单
Color Blind Mode启用此设置可使性能分析器在其图形中使用更高对比度的颜色。这样可以增强红绿色盲(例如绿色盲、红色盲或蓝色盲)用户的视觉感知度。
Show stats for “current” frame默认情况下,选择 Current Frame 按钮并进入 Current Frame 模式时,帧指示线不会随当前帧统计信息显示相关注释。这是因为统计信息注释可能导致难以实时查看数据。要显示注释,请启用此设置。
Preferences打开 Preferences 菜单以调整特定于性能分析器的属性。

为了保持低开销,Unity 仅每隔五帧重绘一次 Editor UI。这样会导致更新过程略有卡顿。

深度性能分析

通常,性能分析器仅对用 ProfilerMarker 显式包裹的代码时序进行性能分析。这包括从引擎原生代码到脚本代码的调用(例如 MonoBehaviour 的 StartUpdate 或类似方法)的第一个调用栈深度。

如果未向您自己的代码添加更显式的 ProfilerMarker 检测,您可以视为脚本代码的子样本的唯一其他样本是回调到 Unity API 中的样本(如果已对该 API 进行检测)。带有性能开销的大多数 API 调用都会经过检测。例如,通过 Camera.main API 访问主摄像机的操作被注册为“FindMainCamera”样本。

启用 Deep Profile 设置后,性能分析器会对脚本代码的每个部分进行性能分析,并记录所有函数调用,至少包括进入任何 Unity API 中的第一个调用栈深度。此信息可用于帮助您确定代码对应用程序性能的影响,但这会带来很大的开销。

对应用程序进行深度性能分析时,Unity 会将性能分析器检测功能注入到所有脚本方法中,从而记录所有函数调用。这有助于了解应用程序代码在哪些方面花费最多的时间。

深度性能分析是资源密集型操作,会耗用大量内存。因此,在进行性能分析时,应用程序运行速度显著降低。深度性能分析更适合用简单脚本编写的小游戏。如果使用的是复杂脚本代码,则应用程序可能根本无法使用深度性能分析。对于许多较大的应用程序,深度性能分析可能会使 Unity 耗尽内存。

如果遇到问题,导致性能分析器的太多样本存储在环形缓冲区(用于将样本流式传输到性能分析器)中,Unity 将显示一条错误消息。为了增加环形缓冲区的大小,可以调整进行性能分析的播放器的 Profiler.maxUsedMemory 属性。

如果深度性能分析导致应用程序的帧率下降太多而无法运行,您可以手动对脚本代码块进行性能分析,此方法的开销小于深度性能分析。使用 ProfilerMarker 可以手动添加标记脚本块所需的检测。这些会显示在 CPU Usage Profiler 模块中。

如果要找出产生 GC.Alloc 样本的调用栈而不想进行深度性能分析,可以开启__分配调用栈__的收集。启用性能分析器控件中的 Call Stacks 设置,然后可以在 Timeline 视图中选择 GC.Alloc 样本,或者使用 Hierarchy 视图中的 Show Related Objects 面板来查找这些样本的调用栈。

C性能分析器帧图表

Profiler 窗口的上半部分逐帧显示随时间推移的性能数据。运行应用程序时,性能分析器会记录每帧的数据。默认情况下,Profiler 窗口显示其进行性能分析的最近 300 帧的历史记录。可以在 Preferences 窗口中增加性能分析器进行性能分析的帧的数量(最多为 2,000 帧)。

在 Profiler 窗口的性能分析器帧图表区域中单击时,将出现一条白线来突出显示应用程序的一帧。要在帧之间导航,请使用 Profiler 窗口的工具栏中的传输控件。

Unity 自动管理图表的垂直刻度,而且图表会尝试填充窗口的垂直空间。要查看图表中的更多详细信息,可以删除其他性能分析器模块,也可以拖动图表和详细统计信息区域之间的分隔线来增大图表的屏幕区域。

要在图表中切换指标的隐藏和显示,请在相关模块中单击相应标签旁的有色方块。这样可以方便找到出现尖峰的原因。在堆积图表(例如 CPU Usage Profiler 的图表)中,可以将指标标签重新排序以影响堆积顺序。这样可以使干扰较多的指标更加明显,从而使图表更清晰。

每个性能分析器模块收集不同的性能数据指标并将它们显示在单独的图表中。单击某个帧时,Unity 在 Profiler 窗口下半部分的模块详细信息面板中显示有关该帧的更多详细信息。此窗口中的详细信息类型会因选择的性能分析器模块而异。有关每个模块在此区域中显示的特定详细信息的更多信息。

命令行参数

如果从命令行(例如 Windows 上的命令提示符,macOS 上的终端,Linux Shell,或者 Android 的 adb)启动构建的播放器或 Unity Editor,可以传递命令行参数来配置一些性能分析器设置。

命令行参数描述
-deepprofiling在构建的播放器中启用深度性能分析。
-profiler-enable对播放器或 Editor 的启动进行性能分析。将此参数与播放器一起使用时,效果与在 Build Settings 中启用 Autoconnect Profiler 选项来构建播放器的效果相同。

将此参数与 Editor 一起使用时,在 Editor 启动时会开始在 Profiler 窗口中收集和显示性能分析器信息。
-profiler-log-file <Path/To/Log/File.raw>此参数用于设置性能分析器,使其在启动时将性能分析数据流式传输到 .raw 文件。对播放器和 Editor 都有效。
-profiler-capture-frame-count <NumberOfFrames>此参数用于设置启动后流式传输到 .raw 文件时要在性能分析中捕获的帧数量。仅对播放器有效。
-profiler-maxusedmemorymaxUsedMemory 的默认值是 16MB(对于播放器)和 256MB(对于 Editor)。可以在启动时使用此参数将 maxUsedMemory 参数设置为自定义大小(例如,-profiler-maxusedmemory 16777216)。此大小以字节为单位。

D 模块详细信息面板(Hierarchy 

CPU Usage函数热点开销追踪

WaitForTargetFPS:Stats显示绘制能力:234FPS,真实绘制54FPS,对于游戏来说60FPS就够了,剩下的时间结余,可以休息。因此WaitForTargetFPS越高,休眠时间越多,越好。

Camera.Render:绘制摄像机的画面

Overhead:引擎没有统计到的未知开销

Animation.Update:采样出来某一帧的模型动画

BehaviourUpdate:所有脚本里的Update

  •  如何获取方法中循环代码所消耗的时间,除了将它改写成一个方法外,还可以用这句代码解决
  • Profiler.NeginSample("Test Input 10000");for()
    {int i =0;int x=i;
    }Profiler.EndSample();

Gui.Repaint:OnGui的一个开销,消耗极大

AudioManager.Update:声音播放的消耗

MeshSkinning.Update:蒙皮的消耗,这也是为啥stat里为啥要显示蒙皮的数量的原因

Cavas.RenderOverlays:与UGUI绘制相关的消耗

Graphics.Blit:摄像机后处理

什么是一个函数的开销:函数的开销=(调用一次函数消耗的时间:调用别人函数所占的时间+自己所占的时间)*调用次数

test(){Debug.Log("helloword");int i=1000+1000;}

追踪过程:谁Total高,谁作为优化的热点,Total是自己及其子物体所占的内存,Self是自己所占的内存。Calls是执行次数。

解决方案:减少调用时间(优化算法,优化结构),减少调用次数(减小问题的规模)
 

Rendering渲染热点开销追踪

优化Drawcall

算出哪儿些物体占的drawcall比较多,drawcall是怎么分布的

显示和隐藏场景文件中的游戏物体来查看是哪儿个游戏物体所占的drawcall较高

合批的数量也是有上限的,这也是为啥800个小兵是两个批次,而不是一个批次

优化思路

a:找到优化的热点

b:找到了以后再来想对策

今天是2024年11月20日

重复一段毒鸡汤来勉励我和你

你的对手在看书

你的仇人在磨刀

你的闺蜜在减肥

隔壁的老王在练腰

而你在干嘛?

相关文章:

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler) 性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策&#xff0c;并确认所做的优化是否产生预期结果。 默认情况下&#xff0c;性能分析器记录并保留游戏的最后 300 帧&a…...

go-rod vs Selenium:自动化测试工具的比较与选择

自动化测试是软件开发过程中的关键环节&#xff0c;它能够帮助我们发现缺陷、验证功能并提高软件质量。随着Web技术的快速发展&#xff0c;市场上出现了多种自动化测试工具&#xff0c;其中Selenium和go-rod是两个备受关注的选择。本文将从多个维度对这两个工具进行比较&#x…...

探索免费的Figma中文版:开启高效设计之旅

在当今数字化设计的浪潮中&#xff0c;Figma以其强大的云端协作功能和出色的设计能力&#xff0c;成为了众多设计师的心头好。而对于国内的设计师来说&#xff0c;能够免费使用Figma中文版更是一大福音&#xff0c;下面就来一起探索一下吧。 一、Figma中文版的获取途径 虽然F…...

功能齐全,支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』

功能齐全&#xff0c;支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 玩NAS的朋友基本都会在本地部署一款浏览器用来远程访问内网的网络设备&#xff0c;或者偶尔拿来浏览一些私密网站都是很方便的。 今天为大家分享的…...

部署实战(二)--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&#xff0c;多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…...

Ubuntu24.04——软件包系统已损坏

如果你在使用 Ubuntu 时遇到“软件包系统已损坏”的问题&#xff0c;可以尝试以下步骤来修复它&#xff1a; 更新软件包列表&#xff1a; 打开终端&#xff0c;运行以下命令以更新软件包列表&#xff1a; sudo apt update修复损坏的软件包&#xff1a; 运行以下命令来修复损坏的…...

2024年华为OD机试真题-空栈压数-C++-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 向一个空栈压入…...

嵌入式Linux基于IMX6ULL tslib学习总结

目录 1. tslib开源库介绍1.1 tslib主要功能1.2 架构 2. tslib代码简单分析2.1 ts_print_mt.c分析代码2.2 ts_setup代码分析2.3 ts_open代码分析2.4 ts_config代码分析2.5 ts_read_mt代码分析2.6 tslib中4个模块的含义 3. 使用tslib库打印触摸屏2点之间的距离 基于韦东山IMX6ULL…...

go中的参数传递是值传递还是引用传递?

在Go语言中&#xff0c;参数传递机制是一个重要的概念&#xff0c;它决定了函数内部对参数的修改是否会影响到原始数据。关于Go中的参数传递是值传递还是引用传递的问题&#xff0c;可以从以下几个方面进行解答。 一、值传递与引用传递的定义 值传递&#xff1a;在值传递中&a…...

记录一种在内核空间向用户空间通知中断的方法

记录一种在内核空间向用户空间通知中断的方法 0.前言1.代码实现1)内核设备驱动实现2)消息通知实现3)测试程序 2.解析 参考文章&#xff1a;Linux驱动实践&#xff1a;中断处理函数如何【发送信号】给应用层&#xff1f; 0.前言 最近在项目中遇到一个需求&#xff0c;需要将一个…...

.NetCore 过滤器和拦截器 的区别

Asp.NET Core 中的过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是两个不同的概念&#xff0c;但它们在某些方面有相似之处&#xff0c;也有明显的区别。 &#x1f511;过滤器&#xff08;Filter&#xff09; 过滤器是Asp.NET Core中用于…...

【笔记】自动驾驶预测与决策规划_Part7_数据驱动的预测方法

文章目录 0. 前言1. 多模态传感器的编码方式1.1 栅格化表示1.2 向量化表示 Vectornet1.3 基于点云或者多模态输入的预测1.4 基于Transformer的方法 2. 网络输出的表达形式2.1 多模态轨迹回归2.2 轨迹分类2.3 轨迹回归轨迹分类2.4 目标点预测 3.场景级别的预测和决策3.1 论文&am…...

React渲染相关内容——渲染流程API、Fragment、渲染相关底层API

React渲染过程依次遇到的函数 在React的渲染流程中&#xff0c;从组件的创建到其UI最终呈现到屏幕上&#xff0c;会经历一系列的生命周期方法和函数。这些方法和函数对于类组件&#xff08;Class Components&#xff09;和函数组件&#xff08;Function Components&#xff09…...

Python中dict支持多个key的方法

在Python中&#xff0c;字典&#xff08;dict&#xff09;是一种非常强大的数据结构&#xff0c;它允许我们通过键&#xff08;key&#xff09;来存储和检索值&#xff08;value&#xff09;。有时候&#xff0c;我们可能想要根据多个键来检索或操作字典中的数据。虽然Python的…...

丹摩 | 基于PyTorch的CIFAR-10图像分类实现

从创建实例开始的新项目流程 第一步&#xff1a;创建实例 登录 DAMODEL 平台。创建一个 GPU 实例&#xff1a; GPU 配置&#xff1a;选择 NVIDIA H800 或其他可用高性能 GPU。 系统配置&#xff1a;推荐使用 Ubuntu 20.04&#xff0c;内存 16GB&#xff0c;硬盘 50GB。 启…...

C#变量和函数如何和unity组件绑定

1.Button On_click (1)GameObject通过Add component添加上Script (2)Button选GameObject组件而不是直接选Script,直接选Script出现不了Script中的函数 2.RawImage 上面是错的 3.Text 上面是错的&#xff0c;应该是直接在GameObject里面填上对应的值 总结&#xff1a; …...

AI模型---安装cuda与cuDNN

1.安装cuda 先打开cmd 输入nvidia-smi 查看显卡支持cuda对应的版本&#xff1a; 然后去英伟达官网下载cuda&#xff08;外网多刷几次&#xff09; https://developer.nvidia.com/cuda-toolkit-archive 注意对应版本 安装过程中如果显示如下图&#xff1a; 请安装visual Stu…...

【大数据学习 | Spark-Core】Spark提交及运行流程

spark的集群运行结构 我们要选择第一种使用方式 命令组成结构 spark-submit [选项] jar包 参数 standalone集群能够使用的选项。 --master MASTER_URL #集群地址 --class class_name #jar包中的类 --executor-memory MEM #executor的内存 --executor-cores NUM # executor的…...

内网渗透横向移动1

1.信息收集 &#xff08;1&#xff09;判断域控 shell net time /domain shell ping OWA2010CN-God.god.org &#xff08;2&#xff09;主机探测 浏览探测->网络探测 主机列表显示&#xff1a; &#xff08;3&#xff09;域用户收集&#xff1a; shell net user /domain…...

现代密码学

概论 计算机安全的最核心三个关键目标&#xff08;指标&#xff09;/为&#xff1a;保密性 Confidentiality、完整性 Integrity、可用性 Availability &#xff0c;三者称为 CIA三元组 数据保密性&#xff1a;确保隐私或是秘密信息不向非授权者泄漏&#xff0c;也不被非授权者使…...

Pod 动态分配存储空间实现持久化存储

配置 Pod 以使用 PersistentVolume 作为存储 ​ 关于持久卷的介绍&#xff0c;可以看官方文档 https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/ ​ 持久卷根据存储位置&#xff0c;可以使用本地存储和云存储&#xff0c;如果有云服务平台&#xff0c…...

Jackson、Gson、FastJSON三款JSON利器比拼

在Java领域&#xff0c;有多种JSON工具包&#xff0c;比如Jackson、Gson、FastJSON&#xff0c;每家都各有所长&#xff0c;下面我们从性能、特性、生态、易用 性等几个方面来展开下&#xff1a; 一、Jackson 性能 Jackson是一款高性能的JSON处理库。它在序列化和反序列化操作…...

php:nginx如何配置WebSocket代理?

在nginx配置中加入以下配置即可&#xff1a; server {listen 80;server_name test.com;# 配置 WebSocket 代理location /ws {proxy_pass http://127.0.0.1:8083;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade&qu…...

3349、检测相邻递增子数组 Ⅰ

3349、[简单] 检测相邻递增子数组 Ⅰ 1、题目描述 给你一个由 n 个整数组成的数组 nums 和一个整数 k&#xff0c;请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c…...

C++笔记之函数入参传递std::unique_ptr 时使用 std::move的场景

C++笔记之函数入参传递std::unique_ptr 时使用 std::move的场景 code review! 参考笔记 C++笔记之unique_ptr转移堆内空间的所有权 文章目录 C++笔记之函数入参传递std::unique_ptr 时使用 std::move的场景一.使用 std::unique_ptr 作为函数参数时的主要场景二.一个完整示例一…...

怎么只提取视频中的声音?从视频中提取纯音频技巧

在数字媒体的广泛应用中&#xff0c;提取视频中的声音已成为一项常见且重要的操作。无论是为了学习、娱乐、创作还是法律用途&#xff0c;提取声音都能为我们带来诸多便利。怎么只提取视频中的声音&#xff1f;本文将详细介绍提取声音的原因、工具、方法以及注意事项。 一、为什…...

数仓工具—Hive语法之窗口函数中的 case when

窗口函数中的 case when 今天我们看一下窗口函数和case when 的各种花活,最近的需求各种窗口,一个需求中十几个窗口,加上各种条件边界,所以写了大量的窗口函数和case when的组合,今天我们来看一下。 我们的数据如下 %spark.pyspark df2 = spark.createDataFrame([(&quo…...

基于微信小程序的酒店客房管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、员工、普通用户功能模块&#xff1a;员工管理、用户管理、客房管理、预订管理、商品管理、评价管理、续订管理、订单管理等技术选型&#xff1a;SSM&#xff0c;vue&#xff0c;uniapp等测试环境&#xff1a;idea2024&#xff0c;jdk1…...

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…...

【AI最前线】DP双像素sensor相关的AI算法全集:深度估计、图像去模糊去雨去雾恢复、图像重建、自动对焦

Dual Pixel 简介 双像素是成像系统的感光元器件中单帧同时生成的图像&#xff1a;通过双像素可以实现&#xff1a;深度估计、图像去模糊去雨去雾恢复、图像重建 成像原理来源如上&#xff0c;也有遮罩等方式的pd生成&#xff0c;如图双像素视图可以看到光圈的不同一半&#x…...