其实很多写.NET程序的开发人员都很喜欢通过一些计时器来看来一程序或代码的运行效率,的确这样是可以计算出代码执行所损耗的时间。但.net程序的优化不仅仅在于此。大家知道.net提供自动内存回收机制,让我们不用烦恼内存回收问题;同样.net提供给我们的内存分配机制也很出色,因为它能非常快速地帮我们进行内存分配工作。当我们在享受吃糖的乐趣的时候,别忘了这东西吃多了很容易把牙齿给搞坏的;同样.net 回收内存的时候同样也让难受,当然这些情况不会在你资源充足的时候给你带来烦恼;不过一但出现他足可以让你吃不下饭。 所以优化.net程序的时候不要忘了GC这东西,解决他的办法只有一个就是分析那里产生内存,想尽办法去产生内存的地方给干了(说得有点粗爆)。前段时间了解了一个对象序列化组件,测试了一下性能发现其效率真的很出色。测试代码如下:
他的序列化效率比直接代码方式效率只低了50%,这50%的差距带的效果就是编写对象的时候更灵光和代码更少,这是完全可取的。其实测试结果是偏向于后者,如果细心的朋友一定发现一个问题,BufferWriter是可复用的;如果没有这种机制的情况那后者是完全输给前者的。以下是两个实体的定义:
如果紧紧是这样效率上的差异,那必然不会选择手写代码来做,因为手写代码不好维护,容易出错特别是在大量成员读写顺序上.从效率上来说这个组件可以说是完全胜任。当我在做下一步测试的时候发现组件的问题,就是没有内存复用机制;于是用内存分析工具分析一下内存使用状况。发现其内存使用情况有点差,内存的开销有点大,在大并发下其GC压力估计不少。以下是一个测结果:
那手写代码控制序列化同样的工作其内存使用又怎样呢? 从内存使用结果来看其差距还是非常大的,足足有5-6倍的差异,这些内存的GC回来在高并发下足可以让整体处理性能最少有着10%的提升。所以内存复用在.net程序优化中起着十分重要的作用,只是这种优化能体现出来的场景有限;不过当你的产品面对运营的时候发现那就是件比较麻烦的事情,因为这些调整很有可能影响一些核心的地方。当你面对高性能应用的时候别忘了GC这个家伙,它真是一个要命的东西。 |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
.NET架构师:函数式语言做领域驱动设计
Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。
-
软件开发就像炒股 关键看你怎么选股票!
本文作者Paulo Ortins在这里分享了对于选择哪种编程语言作为软件开发工作的起点的话题,并阐述了自己的观点。
-
增进离岸Java开发效率的十个提示
近日,Cygnet Infotech公司发布了一篇博文,谈到了如何增进离岸Java开发的效率。众多的ISV与软件厂商总是在不断寻找能以最低的代价实现其业务目标的解决方案。
-
Visual Studio 2013增强调试功能
Visual Studio 2013包含了若干诊断特性,能够帮助开发人员有效地调试他们的应用程序。