C#性能优化实践

性能主要指两个方面:内存消耗和执行速度。性能优化简而言之,就是在不影响系统运行正确性的前提下 ,使之运行地更快,完成特定功能所需的时间更短。

本文以.NET平台下的控件产品MultiRow为例,描 述C#性能优化的实践。

性能优化原则

理解需求

MultiRow的一个性能需求是:“百万行 数据绑定下平滑滚动。”整个MultiRow项目的开发过程一直在考虑这个目标。

· 理解瓶颈

99%的性能消耗是由于1%的代码造成的。大部分性能优化都是针对这1%的瓶颈代码进行的。具体实施也 就分为两步:“发现瓶颈”和“消除瓶颈”。

· 切忌过度

性能优化本身是有成本的。这个成 本不单单体现在做性能优化所付出的工作量,还包括为性能优化而写出复杂的代码导致额外的维护成本,比如 引入新的Bug,额外的内存开销等。性能优化常常需要在收益和成本之间做出权衡。

如何发现性能瓶颈

性能优化的第一步是发现性能瓶颈,下面是一些定位性能瓶颈的实践。

· 如何获取内存消耗

以下代码可以获取某个操作的内存消耗。

long start = GC.GetTotalMemory(true);
// 在这里写需要被测试内存消耗的代码,例如,创建一个GcMultiRow
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次,取时间消耗的平均值以排除不稳定数据。

· ANTS Performance Profiler

ANTS Performance Profiler是款功能强大的性能检测软件。熟练使用这个工具,我们可以 快速准确的定位到有性能问题的代码。这是一款收费软件,会在IL中加入一些钩子用来记录时间,所以在分析 时,软件的执行速度会比实际运行慢一些,获得的数据也因此并不是百分之百的准确,还要结合其他技巧来分 析程序的性能。

· CodeReview

CodeReview是发现性能问题的最后手段。CodeReview应该对产 品的性能瓶颈尽可能多的关注,确保该部分逻辑执行的尽可能的快。

性能优化的方法和技巧

定 位了性能问题后,解决的办法有很多。下面是一些性能优化的技巧和实践。

· 优化程序结构

在设计时就应该考虑产品结构是否可以达到性能需求。如果后期发现了性能问题,调整结构会带来非常大的开 销。

例如:

GcMultiRow要支持100万行数据。假设每行有10列的话,就需要有1000万个单元格 ,每个单元格上又有很多的属性。如果不做任何优化,大数据量时,一个GcMultiRow软件的内存开销会相当的 大。GcMultiRow采用的方案是使用哈希表来存储行数据:只有用户改过的行放到哈希表里,大部分没有改过的 行都直接使用模板代替。这就达到了节省内存的目的。

WPF平台和Silverlight平台的画法和Winform平 台不同,是通过组合Visual元素的方法实现的。SpreadGrid for WPF产品同样支持百万级的数据量,但是又不 能给每个单元格都分配一个View。所以SpreadGrid使用了VirtualizingPanel来实现画法。思路是每一个 Visual是一个Cell的展示模块,可以和Cell的数据模块分离,这样就只需要为显示出来的Cell创建Visual。当 发生滚动时会有一部分Cell滚出屏幕,有一部分Cell滚入屏幕。这时,让滚出屏幕的Cell和Visual分离,然后 再复用这部分Visual给新进入屏幕的Cell。如此循环,就只需要几百个Visual就可以支持很多的Cell。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, 性能
, 性能优化
, 代码
, c#图片分离组合
, 瓶颈
, 消耗
, 内存瓶颈
, gc模块
如何获取内存
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2016-11-13

C#性能优化实践的相关文章

实例jie如何提高Java Web 服务性能优化实践

本文介绍如何提升 Java Web 服务性能,主要介绍了三种方法:一是采用 Web 服务的异步调用,二是引入 Web 服务批处理模式,三是压缩 SOAP 消息.重点介绍在编程过程中如何使用异步 Web 服务以及异步调用和同步调用的差异点.本文还示范了如何在项目中使用以上三种方法,以及各种方法所适合的应用场景. Java Web 服务简介 Web 服务是一种面向服务架构的技术,通过标准的 Web 协议提供服务,目的是保证不同平台的应用服务可以互操作.Web 服务(Web Service)是基于 X

【第二届PHP全球开发者大会】淘宝技术专家信海龙:淘宝社区双十一性能优化实践

5月14-15日的第二届2016PHP全球开发者大会在北京国际会议中心举行.淘宝技术专家信海龙带来的分享是<淘宝社区双十一性能优化实践>,他主要介绍了淘宝社区在性能优化的基本思路,以及数据库分库分表.搭建降级系统的实践过程.   演讲内容结构:    淘宝社区业务介绍    性能优化基本思路    找出性能瓶颈    数据库分库分表    Memcache数据同步    搭建降级系统 关键内容: 为本次大会合作社区,共享报道. PPT下载地址:https://oss-cn-hangzhou.a

淘宝网前台应用性能优化实践

本文曾发表于2013年4月的<程序员>杂志 近年来,随着用户数和PV的增加,淘宝网的后端服务器数量增长很快:并且我们知道,Web页面延迟时间和转化率之间有着直接的关联.出于提升系统吞吐量.降低成本.减少页面延迟.提升用户浏览体验.提高交易转化率的考虑,淘宝网在性能优化领域做了很多尝试.本文将从应用性能分析.基础设施优化.应用自身优化.前端性能优化这四个方面,对淘宝网的优化尝试做一个总结. 应用性能分析 1. 前台应用介绍 淘宝网前台应用是指商品详情.店铺.购物车等买家直接可以看到和使用的应用,

淘宝首页性能优化实践

想必很多人都已经看到了新版的淘宝首页,它与以往不太一样,这一版页面中四处弥散着个性化的味道,由于独特的个性化需求,前端也面临各方面的技术挑战: 数据来源多 串行请求渲染一个模块 运营数据和个性化数据匹配和管理 数据兜底容灾 本次淘宝首页改版,虽已不再支持 IE6 和 IE7 等低版本的古董浏览器,但依然存在多个影响首页性能的因素: 依赖系统过多,数据的请求分为三块,其一是静态资源(如 js/css/image/iconfont 等):其二是推到 CDN 的静态数据(如运营填写的数据.前端配置信息

丰趣海淘:跨境电商平台的前端性能优化实践

原文出自[听云技术博客]:http://blog.tingyun.com/web/article/detail/586 随着互联网的发展,尤其是在2000年之后浏览器技术渐渐成熟,Web产品也越来越丰富,这时我们被浏览器窗口内的丰富"内容"所吸引,关注HTML/CSS,深入研究Dom.Bom和浏览器的渲染机制等,接触JavaScript库,"前端"这个职业,由此而生. 前端技术在这10多年中飞速发展,到了今天,我们可能发现"内容"的美在视觉上是有

5173首页前端性能优化实践

从制定计划,到前后端的开发,最后到测试以及上线,历时4个月,5173首页前端性能优化项目终于顺利上线,并达到了预期的性能优化目标.这次的项目并不是改版,而是原来首页的设计和功能不变,只做重构和优化.虽然项目名叫前端的性能优化,但也并不仅仅是前端单方面的工作,要想彻底的把优化做好,就需要前后端的通力配合. 历史背景 老首页应该是09年上线的,首页也是各部门争夺资源的地方,大家都想在首页有一席之地,各部门在首页都有各自的小豆腐块,如果有新项目的上线,大多是打补丁的方式,并且唯一的规范就是能保证功能正

Android应用性能优化实践

何杰:UC优视Android技术负责人,专注Android平台应用开发方向:主导过UC浏览器的性能.内存.稳定性.网络优化,增量升级技术攻关,插件平台搭建:目前负责Android UC浏览器的架构优化. Android应用的卡顿问题非常突出,所有用户都能感觉得到却又很难做量化卡顿的严重程度,过去的做法只是零星地发现和解决一些小点.DAU超亿级的 UC浏览器在卡顿优化的过程中建立了一套衡量卡顿严重性的数据指标与监控分析机制,并藉此有针对性地落实了200+个性能优化点.下面会介绍卡顿监控与分析的方法

《OpenACC并行程序设计:性能优化实践指南》一 3.2 逐步性能提升

3.2 逐步性能提升 本书的示例表明,通过提交更多的活动和优化数据传输,使用性能分析驱动的开发可不断提升OpenACC应用程序的性能.图3-2列出了优化混合应用遵循的模式. 从应用准备开始性能优化周期,然后进行实际的性能测量,并对性能数据进行分析.基于这些数据,编程开发人员尝试减少性能问题,并重新开始整个过程.下面使用Score-P和Vampri讲解性能提升周期里的前三步,以CUDA加速粒子单元模拟为例,其中CUDA部分代码很容易用OpenACC实现代替来获得同样的结果.此外,还引入了各种优化步

《OpenACC并行程序设计:性能优化实践指南》一 导读

前言 欢迎阅读本书,这是一本由浅入深的书籍,从初学者到高级开发人员,都可以通过本书了解OpenACC的相关知识.本书由世界各地的24位作者共同编著而成,他们在高度并行编程的教学和实践方面分享了自己的专业知识.书中的例子既有时效性又不会过时.每个章节都是自包含的,可用于自学,也可以作为课堂教学的一部分. 这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的.高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上.具体而言,书中演示了使