More on Memory Usage(.NET内存利用率)

SAP S/4HANA Public Cloud 的 Development Tenant 深度解析 在传统的 SAP On-Premise 版本中,企业通常拥有完整的开发、测试、生产环境,开发人员可以直接访问 ABAP 代码,进行深度定制。然而,S/4HANA Public Cloud 采用了标准化的 SaaS 模型,不允许用户直接修改核心代码。因此,SAP 提供了一种新的开发方式,即 Development Tenant,允许企业在不破坏核心系统稳定性的前提下,实现个性化扩展。Development Tenant 主要用于 SAP S/4HANA Public Cloud 的扩展开发。 阅读详情
  关于 开心的问题 , Saucer 都来了,我也来凑热闹。咧嘴笑脸
  这个问题在优快云上碰到好几次,我每次都只给出了简单的答案:不要参考Task Manager的Mem Usage数据,那个数据的大小对程序性能没有直接影响。
 下面是我分析这问题的一些思路,希望对对这个问题感兴趣的朋友有所帮助。(还有一个原因——很久没有update blog,被开心“警告”了... 吐舌笑脸)

 Q: Is .NET Alone?
 A: Nope!  前面Saucer说过了,这不是.NET的问题,所有Windows程序都有类似的行为。例如下面的C程序:
    void main { while(1); }   //死循环,便于我们察看Task Manager
  初次运行在我的机器上Mem Usage是632K,把Console最小化以后再恢复,Mem Usage变成了36K。显然,这不是一个.NET独有的问题,而是Windows Memory Management的问题。那么和.NET的GC机制也不会有太大的关系——虽然问题的表现形式很容易让人联想到GC。

 Q: How much memory does my program use?
 A: 回答这个问题并不容易。先来看看操作系统虚拟内存管理的一些基本概念:每个Windows进程都拥有4G的地址空间,但是你的机器显然没有4G的物理内存。在多任务环境下,所有进程使用的内存总和可以超过计算机的物理内存。在特定的情况下,进程的一部分可能会从物理内存中删除而被暂存在硬盘的文件里(pagefile),当进程试图访问这些被交换到pagefile里的内存的时候,系统会产生一个缺页中断(page fault),这时候Windows内存管理器会负责把对应的内存页重新从硬盘调入物理内存。
  在某个时间内,一个进程可以直接访问到的物理内存(不发生缺页中断)叫做这个进程的Working Set;而一个进程从4G的地址空间当中实际分配(commit)了的、可访问的内存称为Committed Virtual Memory。Committed VM可能存在于Page File当中,WorkingSet则一定位于物理内存。
  所以要回答上面的问题先要反问一句:What're you talking about? Physical Memory or Committed Memory?

 Q: What is this "Mem Usage" data?
 A: From Task Manager Help: In Task Manager, the current Working Set of a process, in kilobytes.
  Mem Usage这个名字多少有些误导。它只表示这个进程当前占用的物理内存,也就是WorkingSet。WorkingSet不表示进程当前“占用”的所有虚拟内存,该进程可能还有一部分数据被交换到pagefile当中。这些数据只有在被访问的时候才会被加载到物理内存。
  Task Manager有另一列数据:VM Size,表示了一个进程分配的虚存(Committed Visual Memory)——实际的定义要比这个复杂一些,但这个定义对我们目前分析的问题已经足够了。以前面的C程序为例,在最小化前后的VM Size都是176K,并没有变化。
  所以,结论很简单:当一个Windows程序被最小化的时候,Windows内存管理器把该进程的WorkingSet减到最小(根据先进先出FIFO或者最近最少使用LRU),把大部分数据交换到pagefile里。这很容易理解:我们通常总是希望为前台的应用程序留出更多物理内存,从而具有更好的性能。当该程序从最小化恢复的时候,Windows也不会完全加载程序的所有虚存,只是加载了必要的部分。这也很容易理解:程序启动阶段的代码通常在启动之后很少访问(对.NET程序尤其如此,向fusion这样的模块在程序正常加载之后如果没有用到Reflection通常用不到)。

 Q: So, Do we want a smaller workingset, or a larger one?
 A: It depends. Conventional Wisdom tells us: The smaller, the better. 但是在虚存的问题上却没这么简单。如果WorkingSet太小,程序运行过程中会产生很多缺页中断,这会严重影响程序的性能。另一方面,WorkingSet太大会浪费“宝贵的”物理内存,降低整个系统的性能。 通常情况下(除非是对性能非常敏感的应用程序,并且你对Windows的内存管理了如指掌),建议不要在程序中自己调整WorkingSet的大小,而把这个任务交给Windows内存管理器。调整的方法Saucer有提到: SetProcessWorkingSetSize();

 Q: Final Question, Does my program really occupy that much physical memory?
 A: 这个问题看上去土了点——那个数字明明白白的写在Task Manager里面。笑脸
 sam1111用vadump检查的结果显示进程WorkingSet减小的主要原因是很多DLL在从最小化恢复的时候没有被加载到物理内存。我们知道DLL的一个特点是代码共享,以NTDLL.DLL为例,整个Windows系统的几乎所有应用程序(具体地说,Win32子系统的所有程序)都需要引用NTDLL.DLL,如果每人一份,光这个文件就的占用几十兆内存。Windows地解决办法是只在物理内存中保存一份NTDLL.DLL的COPY,所有引用这个DLL的程序都把这一份COPY映射到自己的内存空间里面,共享NTDLL.DLL的代码段(每个进程的数据段仍然是独立的)。所以虽然NTDLL.DLL的大小被计算在你的程序的WorkingSet里面,但是从你的程序中去掉对这个DLL的引用并不会真的释放多少物理内存——你不用,别人还在用呢!
  所以,你的程序“独占”的物理内存远没有Mem Usage所表示的那么多,需要从Mem Usage里面扣除很多Shared Code Page (vadump里面可以看到)。

  结论?不要参考Task Manager的Mem Usage数据,那个数据的大小对程序性能没有直接影响。笑脸 用Perfomence Monitor里面与.NET相关的Counter要容易、准确的多。

 

转自( http://blog.joycode.com/qqchen/archive/2004/03/17/16434.aspx )

QGis二次开发 —— 5.2、基于qgis搭建离线地图服务并开发雷达扫描、无人机飞行跟踪等(附:源码及工程) 阅读详情

相关推荐

现代 AI Agent 编排技术全景(1)—— 分类体系与四大技术维度

本文介绍基于 LLM 的现代 Agent 分类体系与四大技术维度,形成能够刻画不同 Agent 产品架构特征的分类法

佚失的诗篇 236

【003】-Cesium中加载大规模数据稳定流畅之性能优化思路

Cesium 加载大数据的性能优化是一个综合性的过程,需要综合考虑多种因素,采用合适的优化技巧和方法,以达到最佳的性能和用户体验。

wtuynqy的专栏 2万+

使用示波器通过串口抓取数据波形

当我们在软件上发送一个数据,需要在示波器上正确的显示发送数据的波形时,这个过程是需要按照软件上串口配置的参数对示波器进行调节的,本次使用的示波器(型号为RIGOL DS1102Z-E)外观如下图所示,本次对采集波形的调节主要用到以下几处按钮。具体是两条导线T+连接R+、T-连接R-,连接完毕后,打开XCOM软件,首先配置好参数后打开串口,如下所示,若在发送窗口发送数据在接收窗口可以实时显示到的话,证明串口的收发功能是正常的。1.CH1、CH2是示波器上的两个采集通道,本次波形采集使用的是CH1通道。

weixin_58061628的博客 1万+

Cesium加载大规模三维数据渲染性能优化方案

(2)针对不同场景和模型,调整cesium相关参数,包括maximumScreenSpaceError(最大的屏幕空间误差)、maximumMemoryUsage(最大使用的GPU内存量)等。(3)修改Cesium源码:通过限制绘制命令数量,可控制每帧渲染的 GPU 计算需求,稳定提升渲染性能,需要修改原有的三维瓦片渲染过程,修改Cesiumjs\packages\engine\Source\Scene\Cesium3DTileset.js。

fbc3173的博客 4400

KBS投稿全流程拆解:从模板准备到条件接收的实战指南

本文详细拆解了KBS期刊投稿的全流程,从模板准备、投稿系统操作到返修策略和条件接收。重点介绍了Cover Letter撰写技巧、Latex模板选择、审稿周期管理以及返修文件的系统准备方法,帮助研究者高效完成KBS投稿并提升接收概率。

weixin_26938645的博客 704

SpringBoot3 + OAuth2.1实战:5分钟搞定授权码模式(含完整代码)

本文详细介绍了如何在SpringBoot3环境中快速实现OAuth2.1的授权码模式,包括环境配置、核心安全实现及完整代码示例。通过Spring Security集成,开发者可以高效构建企业级安全认证系统,解决版本兼容性问题,提升开发效率。

weixin_29216353的博客 140

cesium 加载 3dtiles 具体参数说明(配最优说明)

url:json切片的地址 show:是否显示 modelMatrix:4x4的转换矩阵,去转换tileset shadows:tileset是否投射或者吸收阴影来着每个光源 默认ShadowMode.ENABLED(接收和投射阴影),Cesium.ShadowMode.RECEIVE_ONLY (只接收阴影),Cesium.ShadowMode.DISABLED(不投射和接收阴影),Cesium.ShadowMode.CAST_ONLY(只接收阴影) maximumScreenSpaceError

weixin_51527962的博客 1万+

WebRTC TURN协议初识及turnserver实践

但是TURN协议对服务器有很高的依赖,服务器在带宽和集群上有很大的压力,所以TURN协议通常是当作ICE协议中的一部分来使用。ChannelData message不使用STUN头部,而使用一个4字节的头部,包含了一个称之为信道号的值(channel number),每一个使用中的信道号都与一个特定的peer绑定,即作为对等端地址的一个记号。该relay地址是个公网地址,可以看作是客户端A在公网上的一个代理,任何想要联系A的客户端,只要将数据发送到A的relay地址就可以了。

yinshipin007的博客 566

Cesium性能优化思路

减少数据量:将数据量压缩至最小,使用合适的压缩算法、数据格式和分辨率,可以减小数据大小,加快数据加载和渲染速度。减小渲染负荷:减小渲染负荷可以提高渲染性能,如减小场景中的对象数、减小纹理尺寸、使用更简单的材质等。优化纹理加载:对纹理进行优化,如减小尺寸、使用 MIPMAP 等,可以减小纹理文件的大小,从而提高加载性能。预处理数据:对数据进行预处理,如优化模型、精简纹理、删除无用信息等,可以减小数据文件的大小,从而提高加载性能。基于GPU的渲染:使用基于 GPU 的渲染技术,可以提高渲染性能和用户体验。

不去想结果,一直在路上 5353

YOLOv8集成CPCA(Combined Parallel Convolutional Attention)注意力机制模块YOLOv8深度教程

YOLOv8集成CPCA注意力模块教程摘要 本教程详细介绍了如何将YOLOv8 CPCA(Combined Parallel Convolutional Attention)注意力模块集成到YOLOv8目标检测框架中。CPCA模块结合了通道注意力和多尺度空间注意力机制,通过全局池化和双路径融合增强通道特征,并利用多尺度深度可分离卷积捕获空间上下文信息。YOLOv8 教程包含完整的实现步骤:创建CPCA模块代码、修改YOLOv8模型解析逻辑、编写自定义配置文件,YOLOv8YOLOv8YOLOv8YOLOv8

FJN110的博客 1620

GTSAM | gtsam::ISAM2

本节简单介绍`gtsam::ISAM2`类。

九七的博客 734

Unity3D - Unity游戏Mono内存管理与泄漏

转载地址:http://blog.csdn.net/honey199396/article/details/52386731 重要内容已经“红色加粗”,希望对大家有帮助! WeTest导读 内存是游戏的硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象。本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存管理问题,并介绍了一系列解决

PAL717的博客 808

x2-DFD:A framework for explainable and explainable deepfake detection

该文章提出了X2-DFD框架,用于可解释和可扩展的深度伪造检测。通过评估大型多模态语言模型(MLLMs)在深度伪造检测中的内在能力,发现它们在不同伪造相关特征上的有效性各异。基于此,实施了针对性的微调策略,显著提高了MLLMs的解释能力,并整合了外部深度伪造检测器(EDDs),以结合MLLMs和传统检测器的互补优势,实现更好的检测和解释。

志在山顶的人,不会贪念山腰的风景 510

More on Memory Usage 内存使用的问题

Q: Is .NET Alone? A: Nope!  前面Saucer说过了,这不是.NET的问题,所有Windows程序都有类似的行为。例如下面的C程序:    void main { while(1); }   //死循环,便于我们察看Task Manager  初次运行在我的机器上Mem Usage是632K,把Console最小化以后再恢复,Mem Usage变成了36K。显然,这不是一

mafia77的专栏 1305

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

More on Memory Usage

  关于开心的问题,Saucer都来了,我也来凑热闹。  这个问题在优快云上碰到好几次,我每次都只给出了简单的答案:不要参考Task Manager的Mem Usage数据,那个数据的大小对程序性能没有直接影响。 下面是我分析这问题的一些思路,希望对对这个问题感兴趣的朋友有所帮助。(还有一个原因——很久没有update blog,被开心“警告”了... ) Q: Is .NET Alone?

Brain1977的专栏 1167

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ASP .net core之Memory usage

Asp .net core内存管理机制注意:在垃圾回收触发时,除了触发垃圾回收的线程外所有的其他线程都会挂起状态分类:主要分为server GC 和workstation GCServer GC:默认值用于多核系统,它为每个处理器创建一个GC Heap,并进行并发执行会后操作(在.net framework4.5之前,concurrent这个是默认的,在之后用backgrou...

weixin_33753003的博客 214

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Measure Memory Usage of .NET Applications

There are two main methods for measuring the memory usage of a .NET application, using the GC class or using System.Diagnostics Retrieve Your App’s Memory Utilization using the GC class The .NET

张彤的专栏 960

ANTS Memory Profiler NET内存泄漏分析工具

ANTS Memory Profiler NET内存泄漏分析工具

gdhjgfr的博客 1469

ANTS Memory Profiler - NET内存泄漏分析工具

ANTS Memory Profiler - NET内存泄漏分析工具

hdsghtj的博客 1101

w3wp.exe memory usage with simple hello world

Question:Hello,while investigating some memory issues on my new server (win2003 SP2), i stumbled upon very demotivating results which i have a hard time believing. This is what i did:1) i cr

xhinker's blog 684

ANTS Memory Profiler - .NET内存泄漏分析工具

ANTS Memory Profiler是RedGate的一款专门用于.NET程序内存分析的工具: http://www.red-gate.com/products/ants_memory_profiler/ Check the memory usage of your .NET program Find memory leaks within minutes Opti

软件质量优化 1万+

.NET Memory usage – A restaurant analogy

https://blogs.msdn.microsoft.com/tess/2006/09/06/net-memory-usage-a-restaurant-analogy/

宇宙终级定理 592

Discover Memory Leaks and Optimize .NET

  ANTS Memory Profiler v11.3.0 now lets you identify and fix memory-related issues within your .NET 8 codebase.  ANTS Memory Profiler by Redgate Software is a powerful tool designed for .NET developers to identify and diagnose memory-related issues within

q2315702359的博客 1189

android profile memory usage

Diagnosing memory usage in a Xamarin.Android application developed with Visual Studio Introduction I recently had cause to diagnose the memory usage of an Android application developed with Xa

u014702999的专栏 895

REDUCING MEMORY USAGE IN UNITY, C# AND .NET/MONO

转自 https://andrewfray.wordpress.com/2013/02/04/reducing-memory-usage-in-unity-c-and-netmono/ Unity on iOS uses an early version of Mono’s heap manager. This manager doesn’t do packing, so if you fr

liqing2060的专栏 906

NVIDIA GPU Fan - Pwr:Usage - ERR!

NVIDIA GPU Fan - Pwr:Usage - ERR!

程永强 4265
上一篇: C#如何限制程序内存使用的大小
下一篇: Windows一个程序究竟用多少内存?
王子样
博客等级 码龄23年 19粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值