`
netbabe
  • 浏览: 24582 次
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)

阅读更多

    在.NET应用中一个常常影响性能的因素就是代码消耗了过多的内存。很多的开发人员在编写代码的过程中常常不会关注性能,从而使得应用程序中到处存在性能瓶颈。很多的时候,开发人员关注的总是代码的执行时间的长短,而把真正的性能问题丢掉了一边。在本篇文章中,我们将会找出代码中的哪些功能消耗了多少内存。

              

本篇文章比较简单,我们会主要详细的介绍CLR Profiler这个工具。

 

基础篇:详解介绍Profiler的使用

       大家可以从这里从微软的站点下载CLR Profiler。一旦下载CLR Profiler之后,我们就可以解压,然后运行Bin文件夹中的“CLRProfiler.exe”。

首先我们来介绍一下CLR Profiler的功能。

 

       CLR Profiler确实是一个不错的工具,通过使用它,我们可以了解一个.NET应用程序到底是如何使用内存的,基本上面它的功能可以分为两类,如图所示:

 

20120409210650.png

 

1. 对一个.NET应用中的内存是如何分配的给出一个完整的描述。所以,我们可以看到每一种类型,方法所占用的内存情况。

2. 它告诉我们一个方法被调用了多少次。

 

       这里需要注意的就是:不要再生产环境或上面的服务器站点中运行CLR Profiler,因为它会严重的影响程序的影响。例如,如果我们的应用程序中包含两个方法,fun1和fun2,此时当我们运行CLR Profiler的时候,它会将一些逻辑注入到应用程序中,通过下面的一个图就可以很清楚的看出这个问题:

 

20120409210755.png

 

 

说了这么多,我们还是来看看,如何使用CLR Profiler。

 

       首先,在使用CLR Profiler之前,我们要清楚:要使用这个工具来干嘛?基本上,有两点理由:查看内存的分配与使用的情况;查看方法被调用次数。

启动了CRLProfiler.exe之后,选择要检查的程序,如下图:

 

20120409210842.png

 

 

此时,应用程序就开始运行,我们就可以在Profiler中看到一些信息,例如应用程序占用的内容,每一代对象占用的大小等,如下:

 20120409210929.png

 

 

       其实上面的那个应用程序非常的简单,只是作为一个demo演示而言。上面的程序的功能就是在一个按钮的事件中调用了两个方法:UseSimpleStringsUseStringBuilders。这个两个方法都是在拼接字符串(这也是常常被用来做例子的一个场景),我们分别让它们拼接1000个字符串,如下:

 

20120409211022.png

 

 

其中UseSimpleStrings如下:

 

20120409211053.png

 

UseStringBuilders如下:

 

20120409211127.png

       现在,我们可以尝试着使用Profiler去看看每个方法使用多少的内存。我们在程序中点击按钮,好让Profiler去收集信息。然后,我们在点击Profiler的“histogram”按钮,此时我们就可以看到程序中的每一种类型的内存占用情况,如下:

 

20120409211321.png

 

如果我们想看每一个方法在运行过程中占用的内容,可以点击“Allocation Graph”,如下:

 

20120409211413.png

 

通过这个操作,我们可以看到下面的图:

 

20120409211458.png

 

       乍一看,可能感觉界面非常的混乱,特别是在应用程序很大的时候。为了更加看到我们想看的方法,我们可以通过在界面的中点击右键,点击“Find Routine”,然后选择输入过滤的条件,如下:

 

20120409211523.png

 

这样就可以快速的定位,如下:

 

20120409211559.png

 

然后在方法上面双击,就进一步的展开,查看细节,如下:

 

20120409211642.png

 

       在上图中,我们只是看到了“UseSimpleStrings”方法的使用内存的情况,因为这个界面显示的信息比较的粗糙,只是把一些内存使用比较多的方法列出来了,我们可以通过点击“0(everything)”查看所以的方法,此时看到如下:

 

20120409211717.png

 

通过上面的图,我们一目了然的直到内存的使用情况。

分享到:
评论

相关推荐

    ASP.NET3.5最佳实践

    本篇将深入探讨ASP.NET 3.5的最佳实践,包括设计模式、性能优化、安全性和可维护性等多个方面。 1. **设计模式** - MVC模式:ASP.NET 3.5引入了Model-View-Controller(MVC)模式,这是一种分离关注点的设计模式,...

    ASP.NET DataGrid使用最佳实践

    本篇将深入探讨ASP.NET DataGrid的最佳实践,以帮助开发者更高效、更优化地利用这个工具。 1. 数据绑定: - 动态数据绑定:为了提高性能,应使用`DataSourceID`属性进行数据绑定,而不是在代码后面手动绑定。这样...

    Asp.net 程式设计基础篇

    **Asp.net 程序设计基础篇** Asp.net 是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站、web应用和web服务。它基于.NET Framework,提供了丰富的功能和工具,使得开发者能够更高效地编写高性能的Web...

    ASP.NET 程序设计基础篇(VB.net)

    在《ASP.NET 程序设计基础篇.pdf》中,你可能会学习到这些概念的详细解释,包括实例代码和实践指导,帮助你掌握ASP.NET和VB.NET的基础知识。通过深入学习和实践,你将能够创建功能丰富的Web应用程序。

    深度挖掘.NET Framework 2.0(8):实战.NET Remoting(下)

    - **案例分析**:通过具体的案例,演示如何在实际项目中使用.NET Remoting,比如构建分布式服务、实现跨进程通信的业务逻辑等。 综上所述,.NET Remoting是.NET Framework 2.0中一个强大的工具,能够帮助开发者构建...

    ASP.NET 2.0入门经典:C#编程篇.pdf

    本书《ASP.NET 2.0入门经典:C#编程篇》显然是针对初学者设计的,旨在帮助读者掌握使用C#语言进行ASP.NET 2.0开发的基础知识。 1. **.NET Framework**:.NET Framework是ASP.NET的基础,它提供了一组类库、运行时...

    深入挖掘ASP.NET 2.0系列课程(11):ASP.NET 中的静态页生成技术

    在ASP.NET中实现静态页生成,可以通过使用aspnet_compiler工具进行预编译,或者在代码中使用HttpHandler或HttpModule来动态生成静态页。同时,可以结合IIS的URL重写模块,将动态URL映射到静态HTML文件,以达到SEO...

    《.NET实践之旅 C#篇》黄凯波著

    第二部分为辅线,介绍c#以及.net framework的基础和特性,采用结合实际工程的方式来引入这些重要的知识点,说明为什么用它们以及怎么使用,并且阐述这些技术的限制,以帮助读者形成自己的技术判断能力,这些知识也是...

    深度挖掘.NET Framework 2.0(7):实战.NET Remoting(上)

    本篇为实战.NET Remoting的上半部分,主要会介绍.NET Remoting的基础概念、架构以及如何设置基本的Remoting应用。 .NET Remoting的核心在于提供了一种透明的方式,使得对象可以在不同的上下文中(如不同的进程或...

    ASP.NET程序设计基础篇

    **ASP.NET程序设计基础篇** ASP.NET是一种由微软公司开发的服务器端Web应用程序框架,用于构建动态网站、web应用和web服务。它是.NET Framework的一部分,提供了丰富的功能和工具,简化了Web开发流程,使得开发者...

    ADO.NET 的最佳实践技巧

    本篇文章将深入探讨ADO.NET的几个关键组件及其最佳实践,帮助开发者提高应用程序的性能、可伸缩性和功能。 首先,ADO.NET的内置对象包括DataSet、DataReader、DataAdapter和Command等,它们各自承担着不同的职责。...

    Microsoft .Net Remoting系列专题

    .NET Remoting是微软.NET框架中的一种技术,用于在不同的应用程序域(AppDomain)之间实现对象间的通信,甚至跨越网络。这种技术可以被视为分布式处理的一种形式,是对早期DCOM(分布式组件对象模型)的一种改进和...

    VB.NET高级篇+VB.NET中级篇教程,有很好的实用价值

    VB.NET是一种基于.NET框架的编程语言,由微软公司开发,旨在提供一种更加直观和高效的编程...通过学习这两个部分的教程,开发者不仅能巩固基础,还能掌握高级特性和最佳实践,从而在实际项目中发挥出VB.NET的强大功能。

    asp.net程序基础篇

    这份"asp.net程序基础篇"可能涵盖了以上一些或全部知识点,通过学习,你可以理解ASP.NET的基础概念,掌握如何创建、运行和调试ASP.NET应用,以及如何使用ASP.NET的各种组件和服务。对于想要深入学习ASP.NET的开发者...

    ASP.NET 程序设计基础篇(PDF).rar

    本教程“ASP.NET程序设计基础篇”旨在帮助.NET初学者快速入门,掌握ASP.NET的基本概念、语法和实践技能。 1. **ASP.NET概述**: ASP.NET是.NET Framework的一部分,提供了丰富的服务器控件、事件驱动模型以及自动...

    .NET 入门篇基础PPT C#

    【.NET 入门篇基础PPT C#】是一份非常适合初学者的教程资料,它涵盖了.NET框架的基础知识,特别是ASP.NET和一部分ADO.NET的教程。这份教程通过13个章节,逐步引导学习者理解并掌握.NET开发的核心概念。 1. **第一章...

    ASP.NET 2.0 入门经典:C#编程篇

    本资源"ASP.NET 2.0 入门经典:C#编程篇"旨在帮助初学者掌握使用C#语言进行ASP.NET开发的基础知识。 在ASP.NET 2.0中,C#作为主要的编程语言,具有现代、面向对象的特点,语法简洁,易于学习。以下是一些关键的知识...

    .net Framework源代码分析

    《.NET Framework源代码分析》 .NET Framework是微软开发的一个全面的、跨平台的应用程序开发框架,它包含了大量的类库,支持多种编程语言,并且提供了对操作系统和硬件的抽象化,使得开发者能够更加专注于应用程序...

Global site tag (gtag.js) - Google Analytics