WEB开发网
开发学院WEB开发ASP.NET C#性能优化实践 阅读

C#性能优化实践

 2012-07-18 16:03:53 来源:WEB开发网   
核心提示: 性能是考量一个控件产品好坏的重要指标,与产品的功能有着同等重要的地位,C#性能优化实践,用户在选择一款控件产品的时候基本都会亲身试验比较同类产品的性能,作为选购那个控件重要因素之一,性能优化的方法和技巧定位了性能问题后,解决的办法有很多,控件的性能指什么降低内存消耗 在控件开发中,内存消耗一般作为次要的考虑

 性能是考量一个控件产品好坏的重要指标,与产品的功能有着同等重要的地位。用户在选择一款控件产品的时候基本都会亲身试验比较同类产品的性能。作为选购那个控件重要因素之一。
控件的性能指什么
降低内存消耗
在控件开发中,内存消耗一般作为次要的考虑,因为现在的计算机一般都拥有比较大的内存,很多情况下,性能优化的手段就是空间换取时间。但是,并不是说,我们可以肆无忌惮的挥霍内存。如果需要支持在大数据量的用例时,如果内存被耗尽,操作系统会发生频繁的内外存交换。导致执行速度急剧下降。
提升执行速度
加载速度。
特定操作的响应速度。包括,点击,键盘输入,滚动,排序过滤等。
性能优化的原则
理解需求
以MultiRow产品为例,MultiRow的一个性能需求是:"百万行数据绑定下平滑滚动。"整个MultiRow项目的开发过程一直要考虑这个目标。
理解瓶颈
根据经验,99%的性能消耗是由于1%的代码造成的。所以,大部分性能优化都是针对这1%的瓶颈代码进行的。具体实施也就分为两步。首先,确定瓶颈,其次消除瓶颈。
切忌过度
首先必须要认识到,性能优化本身是有成本的。这个成本不单单体现在做性能优化所付出的工作量。还包括为性能优化而写出的复杂代码,额外的维护成本,会引入新的Bug,额外的内存开销等。 一个常见问题是,一些刚接触控件开发的同学会对一些不必要的点生搬硬套性能优化技巧或者设计模式,带来不必要的复杂度。性能优化常常需要对收益和成本之间做出权衡。
如何发现性能瓶颈
上一节提到,性能优化的第一步就是发现性能瓶颈,这一节主要介绍定位性能瓶颈的一些实践。
如何获取内存消耗
以下代码可以获取某个操作的内存消耗。
// 在这里写一些可能消耗内存的代码,例如,如果想了解创建一个GcMultiRow控件需要多少内存可以执行以下代码
long start = GC.GetTotalMemory(true);
var gcMulitRow1 = new GcMultiRow();
GC.Collect();
// 确保所有内存都被GC回收
GC.WaitForFullGCComplete();
long end = GC.GetTotalMemory(true);
long useMemory = end - start;
如何获取时间消耗
以下代码可以获取某个操作时间消耗。
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); for (int i = 0; i < 1000; i++) { gcMultiRow1.Sort(); } watch.Stop(); var useTime = (double)watch.ElapsedMilliseconds / 1000;
这里把一个操作循环执行了1000次,最后再把消耗的时间除以1000来确定最终消耗的时间。可以是结果更准确稳定,排除意外数据。
通过CodeReview发现性能问题。
很多情况下,可以通过CodeReview发现性能问题。对于大数据量的循环,要格外关注。循环内的逻辑应该执行的尽可能的快。
Auts Performance Profiler
Auts Profiler是款功能强大的性能检测软件。可以很好的帮助我们发现性能瓶颈。使用这款软件定位性能瓶颈可以起到事半功倍的效果。熟练使用这个工具,我们可以快速准确的定位到有性能问题的代码。 这个工具很强大,但是也并不是完美无缺的。首先,这是一款收费软件,部门只有几个许可号。其次,这个软件的工作原理是在IL中加入一些钩子,用来记录时间。所以在分析时,软件的执行速度会比实际运行慢一些获得的数据也因此并不是百分之百的准确,应该把软件分析的数据作为参考,帮助快速定位问题,但是不要完全依赖,还要结合其他技巧来分析程序的性能。
性能优化的方法和技巧
定位了性能问题后,解决的办法有很多。这个章节会介绍一些性能优化的技巧和实践。
优化程序结构

1 2 3 4  下一页

Tags:性能 优化 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接