构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能

简介:
构建高性能ASP.NET 站点  第七章  如何解决内存的问题( 前中篇)— 托管资源优化监测CLR 性能
    前言:在上一篇文章中讲述了一些垃圾回收的一些知识,本篇就讲述如何来监测CLR 是否导致了一些性能问题。 
 
本篇的议题如下:
内存问题概述( 前篇)
托管资源优化(前篇)
          对象的生命周期(前篇)
          对象的 代“(前篇)
          大对象堆(LOH)  (前篇)
         CLR 计数器的使用          (中篇)
         CLR Profiler 的使用(中篇)
          垃圾回收器的不同版本(中篇)
          对象使用注意事项(后篇)
          常用优化措施(后篇)
非托管资源优化
Session 会话的优化
 
     CLR 计数器的使用
我们使用系统自带的性能监测工具来跟踪和监测垃圾回收器。
下面,首先介绍几个常用的CLR 性能监测计数器,我们一般查看 .NET CLR Memory 分类下的计数器:
Percent Time in GC
表明了从上次垃圾回收机制运行之后到现在这段时间内,运行垃圾回收机制所花的时间占总时间的百分比。不要超过10%
Gen 0 heap size
这个数值不是表明当前托管堆中Gen 0 对象所占的大小,而是指:还可以分配的Gen 0 对象的大小
Gen 1 heap size
表明当前Gen 1  对象所占的托管堆的空间大小
Gen 2 heap size
表明当前Gen 2  对象所占的托管堆的空间大小
Large Object Heap size
当前LOH 的大小
# Byte in all Heaps
是上面 Gen 0 heap size Gen 1 heap size Gen 2 heap size Large Object Heap size 所有的种和,也就是整个托管堆所占的空间大小
# Gen 0 Collections
从系统开启之后到现在,垃圾回收器回收Gen 0 对象的次数
# Gen 1 Collections
从系统开启之后到现在,垃圾回收器回收Gen 1 对象的次数
# Gen 2 Collections
从系统开启之后到现在,垃圾回收器回收Gen 2 对象的次数
介绍完上面的一些计数器之后,大家可以运行perfmon命令,打开性能监测工具。
 
下面开始介绍CLR Profiler CLR  透析器)
 
     CLR Profiler
CLR Profiler 是微软开发的一个工具,这个工具可以用来检测CLR 所占用的内存详情。
大家可以去下面的链接去下载这个工具:
下面的链接详细的讲述这个工具的用法:
        
          在这里,只是简单的介绍一下如何使用,至于详细的操作,还请大家去查看上面给出的链接。使用的步骤如下:
1.        运行CLR Proflier
2.        确保Profiling active, Allocations, Calls都勾选上。如下:
 
3.        选择File->Profile ASP.NET”. 这个操作的背后会停止IIS 的运行,然后插入一些指令,然后重启IIS ,所以这个工具在生产环境中慎用。
 
4.        然后我们可以在VS F5 运行我们的网站( 确保在创建网站的时候是以IIS 方式来建立站点的,而不是选择 文件系统 的方式建立)
5.        在界面上面点击Kill ASP.NET”. 这个操作的背后会移除之前加入到IIS 中的一些监视指令。点击按钮之后,会出现一些界面。这个界面上面显示了Gen0, Gen1 Gen2 ,LOH 所占的大小,如下:
 
6.        我们还可以点击Histogram按钮。这个界面展示了不同大小以及不同类型的对象所占的比例。下面对看出,系统中有很多的string 对象,也就说,系统中的string 类型的对象占据了系统大部分的内存空间。
 
          大家可以查看更多的信息,这里不再赘述了,下面我们来看看垃圾回收器的版本问题。
 
    垃圾回收器版本
    在CLR 中,垃圾回收器是有两个版本的:
1.        服务端版本。CLR 中的这个垃圾回收器版本进行了一系列的内存,处理器优化,用来进一步的提高性能。
2.        工作组版本,这是相对服务端版本而言的,主要是用在桌面开发中,例如在WPF Winform 中,就是采用的这个版本垃圾回收器。
 
    在ASP.NET 中就是采用的CLR 服务端版本的垃圾回收器。
 
      OK ,今天就暂时写到这里,下一篇讲述一些针对上述问题的一些优化措施。





















本文转自yanyangtian51CTO博客,原文链接: http://blog.51cto.com/yanyangtian/497151  ,如需转载请自行联系原作者


相关文章
|
11月前
|
监控 网络协议 安全
|
消息中间件 Linux iOS开发
.NET 高性能异步套接字库,支持多协议、跨平台、高并发
【11月更文挑战第3天】本文介绍了高性能异步套接字库在网络编程中的重要性,特别是在处理大量并发连接的应用中。重点讨论了 .NET 中的 Socket.IO 和 SuperSocket 两个库,它们分别在多协议支持、跨平台特性和高并发处理方面表现出色。Socket.IO 基于 WebSocket 协议,支持多种通信协议和跨平台运行,适用于实时通信应用。SuperSocket 则通过事件驱动的异步编程模型,实现了高效的高并发处理,适用于需要自定义协议的场景。这些库各有特点,可根据具体需求选择合适的库。
271 6
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
204 2
|
前端开发 关系型数据库 MySQL
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
366 2
|
存储 算法 Java
深入理解.NET中的托管堆及其工作原理
【8月更文挑战第31天】
203 2
|
开发者 Apache 程序员
揭秘Apache Wicket:页面生命周期背后的神秘力量!
【8月更文挑战第31天】李工是一位热爱Web开发的程序员,近日在技术博客上分享了他对Apache Wicket框架的学习心得,特别是页面生命周期的理解。他认为掌握Wicket页面生命周期对于开发富交互式Web应用至关重要。他通过一个简单的计数器应用示例,详细解释了Wicket的组件化设计理念以及页面和组件在生命周期中的变化。
145 0
|
存储 测试技术 C#
Blazor WebAssembly 开启离线应用开发新时代!C# 与.NET 助力,打造高性能跨平台新体验!
【8月更文挑战第31天】在互联网快速发展的今天,用户对Web应用体验的要求日益提高,尤其在无网络环境下使用应用的需求愈发明显。Blazor WebAssembly 应运而生,它基于 WebAssembly 技术,允许开发者利用 C# 和 .NET 构建交互式 Web 应用,无需服务器支持即可在浏览器中运行,从而实现离线使用。Blazor WebAssembly 具有使用熟悉的技术栈、高性能、离线支持以及跨平台等优势。开发者可通过安装开发工具、创建项目、编写代码、调试测试及发布应用几个步骤来进行开发。这为离线应用开发开启了新篇章。
515 0
|
Rust 安全 程序员
揭秘Rust语言的内存安全秘籍:如何构建坚不可摧的系统级应用?
【8月更文挑战第31天】Rust语言凭借其独特内存安全机制在编程领域脱颖而出,通过所有权、借用与生命周期等概念,在保证高性能的同时避免了缓冲区溢出等常见错误。本文深入探讨Rust的内存安全机制,并通过示例代码展示如何利用这些机制构建高效且可靠的系统。尽管这些机制增加了学习难度,但为软件开发奠定了坚实基础,使Rust成为系统、嵌入式及网络编程的理想选择。随着社区的发展,Rust将在未来软件开发中扮演更重要角色。
395 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
447 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
234 7