本篇通过一小段代码的console程序来进行性能的分析以及改进、直到后面的改进前、改进后性能比较结果。
先看console代码(源代码下载):
复制代码 代码如下:
static void Main(string[] args)
{
int i = 10000;
while(i-->0)
{
Core c=new Core();
c.Process(DateTime.Now.ToString());
}
}
public class Core
{
public void Process(string input)
{
//process logic
string result = string.Format("{0}-{1}", DateTime.Now, input);
//log to file
Log(result);
}
public void Log(string message)
{
string fileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt");
string msg = "{Now}: {Message}";
msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
msg = msg.Replace("{Message}", message);
using (StreamWriter sw = System.IO.File.AppendText(fileName))
{
sw.WriteLine(msg);
sw.Flush();
sw.Close();
}
}
}
点击“完成”按钮,此时会自动进行分析,直接跑完控制台程序,vs2012会自动显示出分析报告,如下:
从上面的“摘要”报告中得知
- System.IO.File.AppendText函数和System.AppDomain.get_BaseDirectory函数耗时最多,我们需要先优化这2个函数的使用(稍后再讲)共列出了最耗时的5个函数
报告视图种类:
生成的报告视图有很多种,上面所示默认的是“摘要”视图,其他类型的视图如下所列:
那么我们如何跟踪这几个耗时的函数呢?我们需要转入“函数详细信息”视图,如下:
右边红框代表耗时分布比例,显然上图中Process函数占用了很大比例
下边的红框代表相应的代码,并且还会红色高亮性能损耗突出的代码行、以及相应损耗比例(图中的99.2%是由于这行代码共有3个损耗点:83.3%+14.4%+1.5%)
我们需要往下跟踪,进入最严重的process函数进行查看,我们click右边红框中的Process条,进入细化的分析界面,如下:
看来主要问题来自"Log(result)"代码行,占了73.5%,继续深入跟踪,如下图:
这下差不多了,这里比较损耗多的2行是:获得fileName和AppendText到日志文件代码行,分别优化:
- 获得文件名优化日志文件名是不变的,因此不用每次Log(msg)都要计算,直接extract为static的fileName变量AppendText优化一旦牵涉到I/O操作,速度就慢,无法避免(从单行代码的角度来看),那怎么办?那就把结构改掉吧:主程序写入log到队列中,由另外一个thread负责写入到磁盘中
修改代码如下:
复制代码 代码如下:
public class Core
{
public void Process(string input)
{
//process logic
string result = string.Format("{0}-{1}", DateTime.Now, input);
//log to file
Log(result);
}
private static List<string> log = new List<string>();
public static void Log(string message)//fileName去掉了,因为此时已经不需要这个变量了,因为是由其他线程负责写入磁盘
{
string msg = "{Now}: {Message}";
msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
msg = msg.Replace("{Message}", message);
log.Add(msg);
}
}
我们比较下第一次和这一次的曲线图:
改进后的性能明显好于改进之前的性能。
自定义性能分析
我们可以通过修改属性来add/remove性能指标,比如要加入某个/某些Windows计数器、收集Windows事件、收集.NET对象生命周期等,我们可以进行如下操作来进行设置:
将会生成如下更详细的报告:
报告中会列出生成的最多的是哪种对象(本例中是string)、由哪些函数导致的分配了最多的内存、等等
在“标记”视图中,能看到每隔500毫秒收集的windows计数器数据,如下图就是磁盘队列计数器的收集:
在“对象生存期”视图中,能看到各种对象从new到dispose的所有数据,如下图:
很牛b吧。
下面说说如何通过VS2012来对独立运行的程序进行性能分析,其实很简单,就下面这个图就搞定了,大家都懂的:
再说说如何对web项目性能分析吧...
先打开web项目解决方案,然后直接进行性能分析,有人会说没有请求操作啊,这个简单,有多个解决办法:
再开一个VS环境(无论是远程的还是本地的),通过web负载测试来疯狂请求通过loadrunner/qtp来模拟请求悲催的人工请求...VS2012,工具使用
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】