博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  .NET性能优化

.NET Performance
摘要:内容预告:Windows内置工具(性能计数器)事件跟踪器(WPT,PerfMoniter,PerfView,自定义ETW)时间分析内存分配分析内存使用量分析其他分析Event Tracing for Windows(ETW)可以查看很多内核和CLR的性能数据,如下表所示,有几个工具都是基于ETW开发的,后面会详细介绍:KernelPROC_THREADCreation and destruction of processes and threadsKernelLOADERLoad and unload of images (DLLs, drivers, EXEs)KernelSYSCALLSy 阅读全文

posted @ 2012-12-09 22:03 淡如水wp 阅读(4882) 评论(0) 推荐(1)

摘要:内容预告:Windows内置工具(性能计数器)事件跟踪器时间分析内存分配分析内存使用量分析其他分析性能计数器:直接win+R运行 perfmon.exe 即可打开。可以在以下场景下使用:如果发现有内存泄露,性能计数器可以被用来检查托管还是本地内存分配的问题。Process\Private Bytes可以查看所有进程分配的private内存(包括GC堆)和.NET CLR Memory\# Bytes in All Heaps可以查看托管内存。如果ASP.NET程序有反常的行为,在ASP.NET目录下可以看详细信息,比如请求时间,请求超时时间, 请求等待时间, 请求执行时间等计数器可以确认负载情 阅读全文

posted @ 2012-12-09 22:02 淡如水wp 阅读(1907) 评论(0) 推荐(0)

摘要:内容预告:线程入门(线程概念,创建线程)同步基础(同步本质,线程安全,线程中断,线程状态,同步上下文)使用线程(后台任务,线程池,读写锁,异步代理,定时器,本地存储)高级话题(非阻塞线程,扶起和恢复)同步的本质:下面的列表总结了.NET同步线程的工具:阻塞函数:Sleep:阻塞线程一定时间。Join:阻塞另一个线程至本线程完成。加锁结构:lock:保证只有一个线程可以存取同一个资源,或操作一段代码。不能跨进程。速度快。Mutex:保证只有一个线程可以存取同一个资源,或操作一段代码。可以用来阻止一个程序启动多个线程。可以跨进程,速度一般。Semaphore:保证不超过某个数量的线程可以存取同一个 阅读全文

posted @ 2012-12-09 10:49 淡如水wp 阅读(4392) 评论(4) 推荐(0)

摘要:内容预告:线程入门(线程概念,创建线程)同步基础(同步本质,线程安全,线程中断,线程状态,同步上下文)使用线程(后台任务,线程池,读写锁,异步代理,定时器,本地存储)高级话题(非阻塞线程,扶起和恢复)概览:C#支持通过多线程并行地执行代码,一个线程是独立的执行个体,可以和其他线程同时运行。CLR和操作系统会给C#程序开启一个线程(主线程),可以被用来作为创建多线程的起点,例子:class ThreadTest {static void Main() {Thread t = new Thread (WriteY);t.Start(); // Run WriteY on the new threa 阅读全文

posted @ 2012-12-05 01:24 淡如水wp 阅读(14296) 评论(0) 推荐(3)

摘要:深入理解值类型:值类型的内存布局更简单,但是它引入一些限制和装箱,装箱是一个代价高昂的过程。用值类型的主要原因是其内存密度高而且开销少。下面还是以简单的Point2D来讨论:public struct Point2D{public int X;public int Y;}Point2D实例以X=5, Y=7初始化的内存布局就像下图一样,没有额外的开销:少数罕见的情况下,需要自定义值类型的内存布局,一个例子是为了达到互操作的目的,当值类型的实例原样传到非托管代码时。可以通过两个属性来做这种自定义,StructLayout 和 FieldOffset。StructLayout可以用来指定对象的字段 阅读全文

posted @ 2012-11-29 17:23 淡如水wp 阅读(742) 评论(0) 推荐(0)

摘要:一、引子 假如有一个Point2D类表达一个二维空间--点,每个坐标都是一个short类型,整个对象有4个字节。如果存储100万个点,会用多少字节的空间?答案是取决于Point2D是值类型还是引用类型,如果是引用类型,100万个点将会存储100万个引用,这些引用在32位操作系统上就是40M左右,但这些对象本身还要占最少同样的空间,事实上,每个Point2D将会占12个字节的空间,这样算下来总的内存数在160M。但如果是值类型,没有一个多余字节的浪费,就是整整40M,只有引用类型时的1/4,不同就在于值类型的内存密度。 存储成引用类型还有一个缺点是如果想在这个巨型的堆对象引用数组(非连续存储.. 阅读全文

posted @ 2012-11-27 23:30 淡如水wp 阅读(1750) 评论(2) 推荐(0)

摘要:一、性能衡量要素CPU使用率(百分比)物理/虚拟内存使用量(KB,MB,GB)缓存命中率(次数,率/每秒)页面错误率(次数,率/每秒)数据库存储时间(率/每秒)内存分配(字节数,对象数,率/每秒)执行时间(字节数,对象数,率/每秒)网络操作量(次数,率/每秒)硬盘操作量(次数,率/每秒)响应时间(毫秒)垃圾回收(次数,率/每秒,花费的时间)异常(次数,率/每秒)启动时间(毫秒)并发冲突 (次数,率/每秒)二、不同场景下的看重因素 客户端程序:启动时间,内存使用量,CPU使用率。 服务端程序:CPU使用率,缓存命中率,并发冲突,内存分配,垃圾回收。 WEB应用:内存使用量,数据库存储时间,... 阅读全文

posted @ 2012-11-27 17:30 淡如水wp 阅读(718) 评论(2) 推荐(0)