关闭

.NET程序优化不要仅仅盯着代码执行时间

发表于:2012-7-17 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  .NET程序的开发人员都很喜欢通过一些计时器来看来一程序或代码的运行效率,的确这样是可以计算出代码执行所损耗的时间。但.net程序的优化不仅仅在于此.大家知道.net提供自动内存回收机制,让我们不用烦恼内存回收问题

  其实很多写.NET程序的开发人员都很喜欢通过一些计时器来看来一程序或代码的运行效率,的确这样是可以计算出代码执行所损耗的时间。但.net程序的优化不仅仅在于此.大家知道.net提供自动内存回收机制,让我们不用烦恼内存回收问题;同样.net提供给我们的内存分配机制也很出色,因为它能非常快速地帮我们进行内存分配工作。当我们在享受吃糖的乐趣的时候,别忘了这东西吃多了很容易把牙齿给搞坏的;同样.net 回收内存的时候同样也让难受,当然这些情况不会在你资源充足的时候给你带来烦恼;不过一但出现他足可以让你吃不下饭。

  所以优化.net程序的时候不要忘了GC这东西,解决他的办法只有一个就是分析那里产生内存,想尽办法去产生内存的地方给干了(说得有点粗爆).前段时间了解了一个对象序列化组件,测试了一下性能发现其效率真的很出色。测试代码如下:

int count = 100000;
KJFObject kobj = new KJFObject();
kobj.Mm = new int[] { 34, 24, 545 };
kobj.Haha = "asfsfasfasfas";
kobj.Bind();
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < count; i++)
{
kobj = new KJFObject();
kobj.Mm = new int[] { 34, 24, 545 };
kobj.Haha = "asfsafsafsafasdfasfasf";
kobj.Bind();
}
sw.Stop();
Console.WriteLine(sw.Elapsed.TotalMilliseconds);
BufferWriter writer = new BufferWriter(Encoding.UTF8);
sw.Reset();
sw.Start();
for (int i = 0; i < count; i++)
{
BObject bobj = new BObject();
bobj.Mm = new int[] { 34, 24, 545 };
bobj.Haha = "asfsafsafsafasdfasfasf";
writer.Reset();
bobj.Save(writer);
}
Console.WriteLine(sw.Elapsed.TotalMilliseconds);

  他的序列化效率比直接代码方式效率只低了50%,这50%的差距带的效果就是编写对象的时候更灵光和代码更少,这是完全可取的。其实测试结果是偏向于后者,如果细心的朋友一定发现一个问题,BufferWriter是可复用的;如果没有这种机制的情况那后者是完全输给前者的。以下是两个实体的定义:

public class KJFObject: IntellectObject
{
private int[] _mm;
[IntellectProperty(0)]
public int[] Mm
{
get { return _mm; }
set { _mm = value; }
}
private string _haha;
[IntellectProperty(1)]
public string Haha
{
get { return _haha; }
set { _haha = value; }
}
}
public class BObject:IMessage
{
private int[] _mm;
public int[] Mm
{
get { return _mm; }
set { _mm = value; }
}
private string _haha;
public string Haha
{
get { return _haha; }
set { _haha = value; }
}
public void Load(BufferReader reader)
{
Mm = reader.ReadInt32s();
Haha = reader.ReadString();
}
public void Save(BufferWriter writer)
{
writer.Write(Mm);
writer.Write(Haha);
}
}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号