Python内存使用分析工具深度解析与实践指南(下篇)
文章目录
- 引言
- 6. guppy3 / Heapy
- 功能
- 安装
- 程序示例
- 适用场景
- 注意事项
- 7. objgraph
- 功能
- 安装
- 程序示例
- 适用场景
- 注意事项
- 8. memory_profiler
- 功能
- 安装
- 程序示例
- 适用场景
- 注意事项
- 9. profile(标准库)
- 功能
- 程序示例
- 适用场景
- 注意事项
- 总结对比表
引言
在Python编程领域,内存使用情况的分析是保障程序高效运行的关键一环。上篇文章中,我们介绍了sys.getsizeof()
、pandas.Series.memory_usage()
等5种内存分析工具。本篇将继续探讨另外4种实用工具,它们分别是guppy3 / Heapy
、objgraph
、memory_profiler
以及profile
的基本应用,帮助你全面掌握Python内存分析的方法与技巧。
6. guppy3 / Heapy
功能
guppy3
库中的Heapy
模块专注于提供对象堆的详细统计信息,涵盖内存中各类对象的数量、大小以及它们之间的引用关系。借助这些丰富的数据,开发者可以清晰洞察内存使用的全貌,精准定位内存占用大户,为优化内存性能提供有力的数据支撑。
安装
uv add guppy3
程序示例
from guppy3 import hpy
import pandas as pd# 示例1:获取整体内存使用统计信息
h = hpy()
print("整体内存使用统计信息:")
print(h.heap())# 示例2:分析包含大量数据的Series的内存使用
series = pd.Series([i for i in range(1000000)])
print("\n包含大量数据的Series的内存使用统计信息:")
print(h.heap())
结果示例:
整体内存使用统计信息:
Partition of a set of 206701 objects. Total size = 31499990 bytes.Index Count % Size % Cumulative % Kind (class / dict of class)0 60983 30 9039272 29 9039272 29 str1 13414 6 5615712 18 14654984 47 types.CodeType2 48136 23 3763128 12 18418112 58 tuple3 28650 14 2565668 8 20983780 67 bytes4 13448 7 2151680 7 23135460 73 function5 1660 1 1917024 6 25052484 80 type6 3834 2 1002336 3 26054820 83 dict (no owner)7 599 0 728296 2 26783116 85 dict of module8 1520 1 652120 2 27435236 87 dict of type9 350 0 302160 1 27737396 88 set
<583 more rows. Type e.g. '_.more' to view.>包含大量数据的Series的内存使用统计信息:
Partition of a set of 206302 objects. Total size = 47462422 bytes.Index Count % Size % Cumulative % Kind (class / dict of class)0 60983 30 9039272 19 9039272 19 str1 39 0 8004020 17 17043292 36 numpy.ndarray2 1 0 8000164 17 25043456 53 pandas.core.series.Series3 13412 7 5615216 12 30658672 65 types.CodeType4 47989 23 3752568 8 34411240 73 tuple5 28644 14 2565392 5 36976632 78 bytes6 13300 6 2128000 4 39104632 82 function7 1660 1 1917024 4 41021656 86 type8 3837 2 1002648 2 42024304 89 dict (no owner)9 599 0 728296 2 42752600 90 dict of module
<592 more rows. Type e.g. '_.more' to view.>
运行上述代码,h.heap()
方法输出的信息会展示内存中不同对象类型的分布、数量以及内存占用大小。通过对比示例1和示例2的结果,能够直观地看到Series
对象对整体内存使用的影响。
适用场景
guppy3 / Heapy
适用于深度内存分析场景,尤其是在优化大型应用程序时,开发者需要全面了解内存中各类对象的分布情况,找出内存占用较高的对象类型及其引用关系,进而针对性地进行内存优化。例如,在处理复杂的数据分析项目或大型Web应用时,该工具可助力开发者深入剖析内存使用状况。
注意事项
在处理大规模数据或复杂内存结构时,guppy3
可能会消耗较多系统资源,导致分析过程耗时较长。此外,其输出信息较为复杂,需要开发者具备一定的内存分析经验,才能准确理解和利用这些数据。
7. objgraph
功能
objgraph
库的核心功能是可视化对象之间的引用关系,这对于排查内存泄漏问题极为有效。它能够以图形化的方式呈现对象引用网络,让开发者直观地发现循环引用等潜在问题。同时,objgraph
还提供了查看内存中数量最多的对象类型、对象实例数量等实用功能,帮助开发者初步了解内存使用概况。
安装
使用objgraph
前,需执行以下安装命令:
pip install objgraph
生成图片需要下载并安装graphviz
下载地址:https://graphviz.org/download/#windows
程序示例
import objgraph
import pandas as pd# 示例1:查看内存中数量最多的对象类型
objgraph.show_most_common_types()# 示例2:模拟循环引用并可视化引用关系
class Node:def __init__(self):self.next = Nonea = Node()
b = Node()
a.next = b
b.next = aobjgraph.show_backrefs([a], filename='循环引用.png')
执行结果:
function 12831
tuple 6496
dict 5045
wrapper_descriptor 2924
ReferenceType 2327
cell 2212
getset_descriptor 2156
method_descriptor 1988
list 1824
builtin_function_or_method 1614
Graph written to C:\Users\xxx\AppData\Local\Temp\objgraph-jlwhcz6b.dot (7 nodes)
Image generated as 循环引用.png
循环引用.png
示例1通过show_most_common_types()
方法,快速展示内存中数量占比较大的对象类型。示例2模拟了循环引用场景,并使用show_backrefs()
方法将对象引用关系生成图片,方便开发者直观地分析循环引用结构。
适用场景
当开发者怀疑程序存在内存泄漏,但难以定位具体原因时,objgraph
是绝佳的选择。通过可视化对象引用关系,能够快速锁定存在问题的对象及其引用路径,从而有效解决内存泄漏问题。此外,在理解复杂数据结构或对象关系时,该工具也能提供直观的辅助。
注意事项
对于大规模复杂的对象网络,objgraph
生成的可视化图形可能会过于繁杂,影响分析效率。使用可视化功能时,需确保系统安装了相应的图形生成依赖(如graphviz
),否则可能无法正常生成图形。
8. memory_profiler
功能
memory_profiler
是一款强大的Python内存分析库,它能让开发者直观地了解每一行代码的内存消耗情况。主要通过两种方式实现:一是使用装饰器@profile
标记函数,运行程序后可查看函数内每行代码的内存占用;二是在Jupyter Notebook中利用魔法命令%mprun
、%memit
进行内存分析,%mprun
用于分析整个函数的内存使用,%memit
则可快速查看单行代码的内存消耗。
安装
首先安装memory_profiler
:
uv add memory-profiler
程序示例
创建memory_test.py
脚本:
使用装饰器@profile
from memory_profiler import profile@profile
def create_large_list():data = []for i in range(100000):data.append(i)return dataif __name__ == "__main__":create_large_list()
执行结果:
Line # Mem usage Increment Occurrences Line Contents
=============================================================3 24.5 MiB 24.5 MiB 1 @profile4 def create_large_list():5 24.5 MiB 0.0 MiB 1 data = []6 28.8 MiB 0.0 MiB 100001 for i in range(100000):7 28.8 MiB 4.2 MiB 100000 data.append(i)8 28.8 MiB 0.0 MiB 1 return data
显示执行时每行代码的内存使用情况。
也可在Jupyter Notebook中使用魔法命令
# 安装并加载扩展
%pip install memory-profiler
%load_ext memory_profiler# 使用 %memit 查看单行代码内存使用
%memit [i for i in range(100000)]# 定义函数并使用 %mprun 分析函数内存使用
def create_dict():my_dict = {}for i in range(10000):my_dict[i] = str(i)return my_dict%mprun -f create_dict create_dict()
%memit
输出单行代码的内存消耗估算值,%mprun
详细打印函数内每行代码的内存增量和累计使用情况。
适用场景
memory_profiler
特别适用于检测循环、数据加载、大量对象创建等操作的内存消耗。在代码优化过程中,若开发者想要精准定位高内存消耗的代码行,该工具能提供详细且直观的分析结果,为优化数据处理逻辑或数据结构提供依据。
注意事项
使用装饰器方式时,在生产环境中应移除@profile
装饰器,以免影响程序性能。memory_profiler
的分析结果可能受系统其他进程内存使用情况的干扰,导致结果存在一定波动。对于底层内存操作或与C扩展模块相关的内存使用,它的统计准确性可能会受到影响。
9. profile(标准库)
功能
profile
是Python标准库中的性能分析工具,主要用于分析程序的CPU执行时间,同时也能间接辅助内存使用分析。通过profile
,开发者可以获取函数调用次数、执行时间等信息,基于这些数据,结合代码逻辑和内存分配原理,能够推测出哪些函数可能存在内存分配频繁或占用大量内存的情况。
程序示例
import profiledef fibonacci(n):if n <= 1:return nreturn fibonacci(n - 1) + fibonacci(n - 2)def calculate_fibonacci_sequence():result = []for i in range(30):result.append(fibonacci(i))return resultif __name__ == "__main__":profile.run('calculate_fibonacci_sequence()')
执行结果:
4356621 function calls (65 primitive calls) in 25.422 secondsOrdered by: standard namencalls tottime percall cumtime percall filename:lineno(function)30 0.000 0.000 0.000 0.000 :0(append)1 0.000 0.000 25.328 25.328 :0(exec)1 0.094 0.094 0.094 0.094 :0(setprofile)1 0.000 0.000 25.328 25.328 <string>:1(<module>)1 0.000 0.000 25.422 25.422 profile:0(calculate_fibonacci_sequence())0 0.000 0.000 profile:0(profiler)
4356586/30 25.328 0.000 25.328 0.844 test.py:3(fibonacci)1 0.000 0.000 25.328 25.328 test.py:8(calculate_fibonacci_sequence)
执行上述代码,profile.run
输出函数调用的统计信息,包括函数名、调用次数、总时间、每次调用的累计时间和原始时间等。通过分析fibonacci
函数的调用情况,可推测该递归函数可能因大量函数调用和中间数据存储,导致内存占用较高。
适用场景
profile
适用于对程序进行全面性能分析的场景。当开发者需要综合考量CPU和内存使用情况,寻找程序性能瓶颈时,profile
提供的函数级调用统计信息,可辅助定位存在问题的函数区域,再结合其他内存分析工具进一步深入分析。
注意事项
profile
无法直接获取内存使用的具体数据,其分析结果主要基于CPU时间,对于I/O密集型操作或与内存管理机制紧密相关的问题,可能无法准确反映实际情况。实际使用中,通常需要与其他专门的内存分析工具配合使用,以获得更全面的性能分析结果。
总结对比表
工具/方法 | 是否递归统计 | 是否精确 | 是否可视化 | 是否需安装 | 推荐用途 |
---|---|---|---|---|---|
sys.getsizeof() | ❌ | ❌ | ❌ | ❌ | 快速查看基本数据类型或简单容器浅层大小 |
pandas.Series.memory_usage() | ❌ | ❌ | ❌ | ❌ | 估算Series 对象及其索引内存(不深入) |
pandas.Series.memory_usage(deep=True) | ✅ | ✅ | ❌ | ❌ | 精确统计Series 对象及其内部对象的内存 |
pympler.asizeof() | ✅ | ✅ | ❌ | ✅ | 统计任意对象及其引用对象的实际内存 |
tracemalloc | ❌ | ✅ | ❌ | ❌ | 调试内存分配与泄漏,追踪内存分配源头 |
guppy3/Heapy | ✅ | ✅ | ❌ | ✅ | 深度分析堆内存,了解对象类型分布与引用关系 |
objgraph | ✅ | ✅ | ✅(图形化) | ✅ | 内存泄漏定位与对象引用关系可视化分析 |
memory_profiler | ❌ | ❌ | ✅ | ✅ | 函数级逐行内存分析,定位高内存消耗代码行 |
profile | ❌ | ❌ | ❌ | ❌ | 综合性能分析,辅助定位可能的内存问题区域 |
通过对这9种Python内存分析工具的详细介绍,相信你对如何分析和优化程序内存使用有了更深入的理解。不同的工具在功能、适用场景和使用方式上各有优劣,在实际项目中,根据具体需求灵活选择和组合这些工具,才能高效地解决内存相关问题,提升Python程序的性能与稳定性。如果你在使用过程中遇到任何问题,或者有新的见解,欢迎随时交流分享。
相关文章:
Python内存使用分析工具深度解析与实践指南(下篇)
文章目录 引言6. guppy3 / Heapy功能安装程序示例适用场景注意事项 7. objgraph功能安装程序示例适用场景注意事项 8. memory_profiler功能安装程序示例适用场景注意事项 9. profile(标准库)功能程序示例适用场景注意事项 总结对比表 引言 在Python编程…...
经典控制理论:线性化笔记
一、弹簧阻尼系统 求B点的位置X0,与弹簧形变后的位置X1的关系 ---- 解: 二、直流电动机模型 求输出转速与输入电压的关系 解:...
【StarRocks系列】查询优化
步骤参考官网 分析查询 | StarRocks StarRocks-Profile分析及优化指南 StarRocks-Profile分析及优化指南 - 经验教程 - StarRocks中文社区论坛...
【STM32】STM32的中断系统寄存器NVIC、EXTI
文章目录 中断概述中断的概念为什么需要中断STM32的中断 STM32的中断体系架构NVICNVIC的介绍中断优先级优先级寄存器优先级组 EXTI 中断概述 中断的概念 在主程序运行过程中,出现了特定事件,使得CPU暂停当前正在运行的程序,转而去处理这个事…...
LLM-201: OpenHands与LLM交互链路分析
一、核心交互链路架构 #mermaid-svg-ZBqCSQk1PPDkIXNx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-icon{fill:#552222;}#mermaid-svg-ZBqCSQk1PPDkIXNx .error-text{fill:#552222;strok…...
税务 VR 虚拟体验,带来全新办税感受
在过去,企业办税难题诸多。申报纳税高峰期,办税服务厅人满为患,财务人员需早起取号排队,耗费大量时间。传统办税流程复杂,涉及多环节和部门,资料繁多,若准备不全或有误就得重新准备,…...
【Linux 驱动中断】
Linux 驱动中断 一、GIC 控制器:硬件中断的枢纽二、GPIO 中断:设备交互的常见入口三、Tasklet 与软中断:高效的异步处理机制3.1 Tasklet3.2 软中断 四、工作队列:灵活的任务处理框架4.1 共享工作队列4.2 自定义工作队列4.3 延迟工…...
ali 轻量服务器安装nginx
# Ubuntu sudo apt install nginx-light # 精简版 # CentOS sudo yum install nginx #启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #验证安装 nginx -v curl -I 127.0.0.1 #常用命令: # 重新加载配…...
2025年- H83-Lc191--139.单词拆分(动态规划)--Java版
1.题目描述 2.思路 字符串s是一个容器(一个背包),wordDict词典是物品,这里面的每个物品我们可以使用多次。 动归五部曲 (1)字符串的长度为i,dp[i]true。 dp[s.size] dp[0]代表空字符串 &#x…...
【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)
🚀 将所有 WSL 发行版从 C 盘迁移到 I 盘的完整教程(含 Podman / NVIDIA Workbench / Ubuntu 等) 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline-CSDN博客 免责声明 重要提示 在执行 WSL 迁移操作前,请务必仔细阅读…...
贪心算法思路详解
文章目录 一、贪心算法是什么?二、贪心算法原理三、再谈背包问题四、活动选择问题五、拟阵理论总结 一、贪心算法是什么? 贪心算法与动态规划算法一样是用于求解最优化类问题的算法,其本质上是基于动态规划算法的改进算法,其所求…...
Keil 安装 CMSIS-FreeRTOS 失败解决方案
一、问题现象 在 Keil 中安装 CMSIS-FreeRTOS 时出现以下错误: (1) 通过内置工具安装: (2)通过官网安装: 二、核心原因 Keil 版本过低,与 CMSIS-FreeRTOS 包不兼容: …...
Python打卡DAY33
DAY33:MLP神经网络的训练 恩师浙大疏锦行 知识点: PyTorch和cuda的安装查看显卡信息的命令行命令(cmd中使用)cuda的检查简单神经网络的流程 数据预处理(归一化、转换成张量)模型的定义 继承nn.Module类定义…...
RJ45 网口实现千兆传输速率(1Gbps)的原理,涉及物理层传输技术、线缆标准、信号调制及网络协议等多方面的协同设计。以下从技术维度展开详细解析:
一、千兆以太网的标准与物理层基础 1. 标准规范 千兆以太网遵循 IEEE 802.3ab(针对双绞线)和 IEEE 802.3z(针对光纤)标准,其中 RJ45 接口对应双绞线场景,核心是通过四对双绞线(CAT5e/CAT6 线缆…...
leetcode hot 100之:二叉树的层序遍历
层序遍历和前中后序遍历不一样,大家可以想象的是:前中后序遍历可以用递归,因为他是以子树为标准来选择的;那层序怎么办呢?怎么才能一层层地遍历呢? void First(TreeNode* root) {printf("%d",ro…...
深入解析BERT:语言分类任务的革命性引擎
“BERT的出现,如同在自然语言处理领域投下了一颗认知炸弹——它让机器真正学会了’联系上下文’。” ——自然语言处理研究者普遍共识 在自然语言处理(NLP)领域,2018年诞生的BERT(Bidirectional Encoder Representatio…...
Pycharm中Jupyter Notebook 插件常用快捷键
bg:Jupyter跟LINQPad很像,都是方便写的时候看数据用 快捷键功能Shift Enter执行当前单元格,并跳转到下一个单元格Ctrl Enter执行当前单元格,不跳转(留在当前单元格)Alt Enter执行当前单元格,…...
【Python】Excel表格操作:ISBN转条形码
一、效果 原始文件: 输出文件: 二、代码 import os import logging from openpyxl import load_workbook from openpyxl.drawing.image import Image as ExcelImage from barcode import EAN13 from barcode.writer import ImageWriterlogging.basicCo…...
大数据Hadoop集群搭建
文章目录 大数据Hadoop集群搭建一、VMware准备Linux虚拟机二、VMware虚拟机系统设置1、主机名、IP、SSH免密登录2、JDK环境部署3、防火墙、SELinux、时间同步 三、VMware虚拟机集群上部署HDFS集群1、集群规划2、上传&解压3、Hadoop安装包目录结构4、修改配置文件࿰…...
饼图:数据可视化的“切蛋糕”艺术
饼图,作为数据可视化家族中最经典、最易识别的成员之一,其核心功能如同其名——像切分蛋糕一样,直观展示一个整体(100%)被划分为若干组成部分的比例关系。 往期文章推荐: 20.用Mermaid代码画ER图:AI时代的…...
mysql server层做了什么
服务器处理客户端请求 服务器程序在处理来自客户端的查询请求时,大致需要分为3部分:连接管理、解析与优化、存储引擎。 连接管理 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互ÿ…...
3.5.1_1 信道划分介质访问控制(上)
在这个视频中我们要介绍信道划分、介质访问控制,这是两个词,我们先介绍一下什么叫做介质访问控制。 通过之前的学习,我们知道在计算机网络当中,有的信道它在逻辑上属于总线型,我们也可以把这种信道称为广播信道&#x…...
RPC常见问题回答
项目流程和架构设计 1.服务端的功能: 1.提供rpc调用对应的函数 2.完成服务注册 服务发现 上线/下线通知 3.提供主题的操作 (创建/删除/订阅/取消订阅) 消息的发布 2.服务的模块划分 1.网络通信模块 net 底层套用的moude库 2.应用层通信协议模块 1.序列化 反序列化数…...
数据分析和可视化:Py爬虫-XPath解析章节要点总结
重要知识点 XPath 概述:XPath 是一门可以在 XML 文件中查找信息的语言,也可用于 HTML 文件。它功能强大,提供简洁明了的路径表达式和多个函数,用于字符串、数值、时间比较等。1999 年成为 W3C 标准,常用于爬虫中抓取网…...
WIFI原因造成ESP8266不断重启的解决办法
一、报错 报错信息如下: 21:37:21.799 -> ets Jan 8 2013,rst cause:2, boot mode:(3,7) 21:37:21.799 -> 21:37:21.799 -> load 0x4010f000, len 3424, room 16 21:37:21.799 -> tail 0 21:37:21.799 -> chksum 0x2e 21:37:21.799 -> loa…...
OSI网络通信模型详解
OSI 模型就是把这整个过程拆解成了 7 个明确分工的步骤,每一层只负责自己那一摊事儿,这样整个系统才能顺畅运转,出了问题也容易找到“锅”在谁那。 核心比喻:寄快递 📦 想象你要把一份重要的礼物(你的数据…...
第五章 中央处理器
5.1 CPU的功能和基本构造 5.1.1 CPU的基本功能 5.1.2 CPU的基本结构 1.运算器 算术逻辑单元ALU 累加寄存器ACC 程序字状态寄存器PSW 计数器CT 暂存寄存器 通用寄存器组 移位器 通用寄存器供用户自由编程,可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器,…...
大模型学习入门——Day3:注意力机制
本系列笔记的教材:快乐学习大模型-DataWhale团队 注意力机制 注意力机制最先源于计算机视觉领域,其核心思想为当我们关注一张图片,我们往往无需看清楚全部内容而仅将注意力集中在重点部分即可。而在自然语言处理领域,我们往往也…...
C++ 学习笔记精要(二)
第一节 特殊类的设计 1. 一个类: 只能在堆上创建对象 关键点:自己控制析构 1.1 方法一: 使用delete禁掉默认析构函数 #include <iostream> using namespace std;class HeapOnly { public:HeapOnly(){_str new char[10];}~HeapOnly() delete;void Destroy(){delete[…...
博士,超28岁,出局!
近日,长沙市望城区《2025年事业引才博士公开引进公告》引发轩然大波——博士岗位年龄要求28周岁及以下,特别优秀者也仅放宽至30周岁。 图源:网络 这份规定让众多"高龄"博士生直呼不合理,并在社交平台掀起激烈讨论。 图源…...
macOS - 根据序列号查看机型、保障信息
文章目录 最近在看 MacBook 二手机,有个咸鱼卖家放个截图 说不清参数,于是想根据 序列号 查看机型。苹果提供了这样的网页: https://checkcoverage.apple.com/ (无需登录) 结果 2025-06-20(五)…...
C/C++ 高频八股文面试题1000题(一)
原作者:Linux教程,原文地址:C/C 高频八股文面试题1000题(一) 在准备技术岗位的求职过程中,C/C始终是绕不开的核心考察点。无论是互联网大厂的笔试面试,还是嵌入式、后台开发、系统编程等方向的岗位,C/C 都…...
C++ map 和 unordered_map 的区别和联系
C map 和 unordered_map 的区别和联系 map 和 unordered_map 都是 C 标准库中关联容器,用于存储键值对。它们的主要区别在于底层实现和性能特性,联系在于它们都提供了键值对的存储和访问功能。 区别: 特性mapunordered_map底层实现红黑树 …...
Sentinel实现原理
Sentinel 是阿里巴巴开源的分布式系统流量控制组件,主要用于服务保护,涵盖流量控制、熔断降级、系统负载保护等功能。 以下是 Sentinel 的实现原理,使用中文简要说明: 1. 总体架构 Sentinel 采用 轻量级 设计,分为 核…...
python打卡day37
疏锦行 知识点回顾: 1. 过拟合的判断:测试集和训练集同步打印指标 2. 模型的保存和加载 a. 仅保存权重 b. 保存权重和模型 c. 保存全部信息checkpoint,还包含训练状态 3. 早停策略 作业:对信贷数据集训练后保存权重…...
MySQL复杂查询优化实战:从多表关联到子查询的性能突破
文章目录 一、复杂查询性能瓶颈分析与优化框架二、多表关联查询的优化策略与实战1. JOIN顺序优化:基于成本估算的表关联策略2. 复合索引与JOIN条件优化3. 大表JOIN的分片处理 三、子查询优化:从嵌套到JOIN的转换艺术1. 标量子查询转换为JOIN2. EXISTS子查…...
LeetCode 680.验证回文串 II
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: C代码: Java代码: 题目: 题目描述: 题目链接: 680. 验证…...
window显示驱动开发—输出合并器阶段
逻辑管道中的最后一步是通过模具或深度确定可见性,以及写入或混合输出以呈现目标,这可以是多种资源类型之一。 这些操作以及输出资源 (呈现目标) 绑定在输出合并阶段定义。 1. 核心功能与管线定位 输出合并是渲染管线的最终固定功能阶段,负…...
单片机开发日志cv MDK-ARM工具链迁移到MAKE
核心经验: STM32H7 多 RAM 区域,外设相关数据段必须放在 AXI SRAM(RAM)区,不能放在 DTCMRAM,否则外设无法访问,程序表面正常但外设全失效。迁移工程时,务必检查链接脚本的内存分布&a…...
大模型与搜索引擎的技术博弈及未来智能范式演进
基于认知革命与技术替代的全景综述 一、大模型对搜索引擎的替代性分析:技术范式与市场重构 (1)技术原理的代际分野 传统搜索引擎遵循 "爬虫抓取 - 索引构建 - 关键词排序" 的三段式架构,其核心是基于 PageRank 算法的…...
Ajax-入门
Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML。其作用有如下2点: 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&a…...
FPGA基础 -- Verilog 共享任务(task)和函数(function)
Verilog 中共享任务(task)和函数(function) 的详细专业培训,适合具有一定 RTL 编程经验的工程师深入掌握。 一、任务(task)与函数(function)的基本区别 特性taskfunctio…...
c++set和pair的使用
set是C中的一种关联容器,具有以下特点: 存储唯一元素(不允许重复) 元素自动排序(默认升序) 基于红黑树实现(平衡二叉搜索树) 插入、删除和查找的时间复杂度为O(log n) 前言 在C…...
数据库中间件ShardingSphere5
一、高性能架构模式 数据库集群,第一种方式“读写分离”,第二种方式“数据库分片”。 1.1 读写分离架构 读写分离原理:将数据库读写操作分散到不同的节点上。 读写分离的基本实现: 主库负责处理事务性的增删改操作,…...
window显示驱动开发—使用状态刷新回调函数
用户模式显示驱动程序可以使用 Direct3D 运行时版本 10 State-Refresh回调函数 来实现无状态驱动程序或构建命令缓冲区前导数据。 Direct3D 运行时在调用 CreateDevice (D3D10 ) 函数时,向D3D10DDIARG_CREATEDEVICE结构的 pUMCallbacks 成员指向的D3D10DDI_CORELAY…...
windows11右击恢复为windows10
文章目录 前言一、问题描述二、解决方案 前言 为了解决win11的右击更多选项的问题 一、问题描述 win11的右键更多选项过于繁琐 二、解决方案 在windows11的终端管理员中输入如下代码: reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c…...
基于物联网的智能衣柜系统设计
标题:基于物联网的智能衣柜系统设计 内容:1.摘要 随着物联网技术的飞速发展,智能家居领域迎来了新的变革机遇。本研究的目的在于设计一种基于物联网的智能衣柜系统,以提升用户的衣物管理和使用体验。方法上,通过搭建物联网硬件平台ÿ…...
GM DC Monitor v2.0 卸载教程
以下俩种方法任选一种均可 第一种方法:一键自动卸载 进入到软件安装目录 卸载app 进入到app目录,运行一键卸载脚本:sh uninstall.sh 卸载es 进入到es目录,运行一键卸载脚本:sh uninstall.sh 卸载db 进入到db目录&a…...
C#上位机实现报警语音播报
我们在开发C#上位机时,有时候会需要将报警信息通过语音进行播报,今天跟大家分享一下具体的实现过程。 一、组件安装 首先我们创建好一个Windows窗体项目,然后添加System.Speech库引用。 点击引用,右击添加引用,在程…...
python自助棋牌室管理系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...