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

.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 MVC和jQuery系列一:入门篇

    ### ASP.NET MVC与jQuery入门详解 #### 一、ASP.NET MVC框架概述 ASP.NET MVC(Model-View-Controller)框架是一种流行的Web应用开发框架,它基于.NET Framework,并且专为那些希望采用MVC架构模式来构建高度可...

    深度挖掘.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的基础,它提供了一组类库、运行时...

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

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

    ADO.NET 的最佳实践技巧

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

    ASP.NET程序设计基础篇

    ASP.NET程序设计基础篇主要涵盖了开发Web应用程序的基本概念和技术,它是微软.NET框架的一部分,用于构建动态、交互式的网站。在本教程中,我们将深入探讨以下几个关键知识点: 1. **.NET框架**:ASP.NET是建立在...

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

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

    ASP.NET 程序设计基础篇 - 林煌章

    《ASP.NET程序设计基础篇》是由林煌章编著的一本入门级教程,旨在帮助初学者理解和掌握ASP.NET这一强大的Web应用程序开发框架。ASP.NET是微软.NET Framework的一部分,它为开发者提供了构建动态、数据驱动的Web应用...

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

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

    ADO.NET的最佳实践技巧

    本篇内容将深入探讨ADO.NET的最佳实践技巧,旨在帮助开发人员提高应用程序的性能、可伸缩性和功能性。 #### 二、ADO.NET框架数据提供程序 .NET框架包含了多种数据提供程序,用于支持不同的数据库系统。这些提供...

    .NET 入门篇基础PPT C#

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

    ADO.NET最佳实践技巧

    本篇文章将深入探讨ADO.NET的最佳实践技巧,帮助开发者提升代码的效率、稳定性和可维护性。 1. **连接管理**: - **连接池**:使用`using`语句或`SqlConnection.Close()`确保连接被正确释放并返回到连接池,以减少...

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

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

    《asp.net中的窗体身份验证(完整篇之三:用户登录页面)》源代码3

    博文《asp.net中的窗体身份验证(完整篇之三:用户登录页面)》中的源代码之三(http://blog.csdn.net/smallfools/archive/2009/05/28/4222155.aspx)

    ASP.NET 2.0入门经典:C#编程篇(pdf英文原版)

    《ASP.NET 2.0入门经典:C#编程篇》是一本专为初学者设计的教程,旨在引导读者深入理解ASP.NET 2.0框架,掌握C#编程基础,从而能够构建功能丰富的Web应用程序。这本书的英文原版提供了一种全球视野,让读者能与国际...

    ASP.NET基础教程(C#版)

    本教程主要针对初学者,采用C#编程语言,通过实例来深入浅出地讲解ASP.NET的基础知识。 在ASP.NET中,Web应用程序是由一系列的服务器控件、代码和配置文件组成的。这些组件协同工作,以响应用户的请求,生成动态...

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

    在《ASP.NET 程序设计基础篇》这本书中,你将学习到以下关键知识点: 1. **Web Forms**:这是ASP.NET中最传统的开发模型,允许开发者通过拖放控件和事件驱动编程来构建页面。Web Forms提供了丰富的服务器控件,如...

Global site tag (gtag.js) - Google Analytics