蝈蝈俊.net

-- 用随笔来记录自己的技术感触
随笔 - 673, 评论 - 4345, 引用 - 276

导航

关于

记录自己的技术心得

标签

每月存档

最新留言

  • Hpvjkkxq
    Best Site good looking <a href=" http://www.wikio.com/user/obymyqufoje/bio &quot...
    by Hpvjkkxq(匿名) on 2010/3/20 4:49:35
  • Wkclxeow
    I'm happy very good site <a href=" http://www.wikio.com/user/julyeugos/bio &quot...
    by Wkclxeow(匿名) on 2010/3/20 4:16:36
  • Pwovfgbs
    Thanks funny site <a href=" http://www.wikio.com/user/julyeugos/bio "&g...
    by Pwovfgbs(匿名) on 2010/3/20 3:22:49
  • Kmngdnii
    I love this site <a href=" http://www.wikio.com/user/agiqijeg/bio ">...
    by Kmngdnii(匿名) on 2010/3/20 2:47:46
  • Xktuzzan
    I love this site <a href=" http://www.wikio.com/user/agiqijeg/bio ">...
    by Xktuzzan(匿名) on 2010/3/20 1:52:40
  • Nljddqxy
    perfect design thanks <a href=" http://www.wikio.com/user/lanemuliu/bio "&a...
    by Nljddqxy(匿名) on 2010/3/20 1:17:55
  • Uxknhplj
    real beauty page <a href=" http://www.wikio.com/user/lanemuliu/bio "&gt...
    by Uxknhplj(匿名) on 2010/3/20 0:21:06
  • Ixuckrcn
    Thanks funny site <a href=" http://www.wikio.com/user/edyfiaky/bio "&gt...
    by Ixuckrcn(匿名) on 2010/3/19 23:46:32
  • Huiqpslm
    Very interesting tale <a href=" http://www.wikio.com/user/edyfiaky/bio "&am...
    by Huiqpslm(匿名) on 2010/3/19 22:51:26
  • Yeldiian
    Cool site goodluck :) <a href=" http://www.wikio.com/user/cucygucyqiran/bio &quo...
    by Yeldiian(匿名) on 2010/3/19 22:17:38

广告

 

企业服务优化原则中有下面一条原则,最近我优化一个企业服务时,对此有了特别深刻的体验,特整理本篇博客:

使用 COM 可封送的参数
如果企业服务组件的方法接受调用方传递数据时所用的参数,强烈建议您尽量使用 COM 和 .NET 之间易于封送的类型,例如:

? Boolean
? Byte、SByte
? Char
? DateTime
? Decimal
? Single、Double
? Guid
? Int16、UInt16、Int32、UInt32、Int64、UInt64
? IntPtr、UIntPtr
? String

如果仅使用这些类型,且要避免传递其他复杂的类型(例如 structures 或 arrays),.NET 序列化程序可以优化调用处理堆栈,并将调用直接序列化到线缆上(对于 RPC)或到虚拟线缆上(对于 LRPC)。这样,调用的执行速度更快。不过,如果您的方法要求复杂的类型,代码将使用通常的 DCOM 调用堆栈调用,这将产生额外的处理。

以上文字来自: .NET 企业服务性能 

我最近优化的这个企业服务是CSDN新积分制论坛帖子列表企业服务缓存。

这个帖子列表缓存工作机制如下:

1、启动一个 ActivationOption.Server 的企业服务(ServicedComponent),这个企业服务是工作在一个独立的服务程序进程。

2、这个企业服务中,通过单件模式启用了一个缓存,缓存了CSDN每个大小论坛的帖子列表。

3、当WEB应用启动时候,把每个论坛,每种帖子列表的帖子都从数据库中获得,然后记录到缓存中。方便以后使用。

4、在优化前,这个版本的新积分制论坛并不是所有CSDN的论坛,有100左右的大小论坛,每个大小论坛又有6种帖子列表,每个帖子列表最多显示满足条件的500条记录。这样,初始化数据大致就需要 100*6*500 大致20万左右的数据需要初始化到帖子列表企业服务缓存。

下面是我做测试的三种情况:

1、优化前我代码逻辑:每一个论坛做一次初始化操作,也就是100个论坛调用企业服务的一个方法100次。

这样的代码逻辑,本地测试环境,完成初始化大致需要130秒左右。

2、我把这个初始化的代码,即从数据库获得并写到缓存的代码搬到企业服务内部执行,外部只需要传递一个简单的论坛编号即可。这样优化后,这个初始化过程大致需要40秒。

3、另外一种方法,我把100个论坛所有帖子列表的数据库都在企业服务外部计算好,然后一次性提交给企业服务,即企业服务这个初始化方法只调用一次,完成这个初始化大致需要190秒左右。

对比我做的上面三个测试情况,我们可以看到,业务逻辑没有发生任何变化,变化的只是企业服务接口参数发生变化了,把一些工作从企业服务外搬到了企业服务内部执行。三种情况对企业服务来说,差别就在于企业服务的参数发生变化了。

上面情况2的企业服务参数最简单,用的是Guid 类型的参数。

情况1和情况3用的是自定义的可序列化的类。

情况1企业服务调用了100次,情况3企业服务只调用了1次。

结论:

1、企业服务的参数要尽量使用 COM 和 .NET 之间易于封送的类型,而不是自己定义的实体和传递其他复杂的类型。

2、企业服务使用自己封装的实体或者复杂的类型,带来的性能损耗,比多次调用企业带来的损耗更厉害(对比情况1和情况3)

参考资料:

.NET 企业服务性能

打印 | 张贴于 2007-08-26 20:09:00 | Tag:.net 编程心得  技术随笔  网站开发管理相关内容  ServicedComponent(企业服务)

留言反馈

#回复: 企业服务性能优化之使用 COM 可封送的参数 编辑
在列表里才罢休的,直到内存撑死为止,在这个过程中是叫天不应叫地不灵,能操作的除了鼠标似乎只有reset和power按钮了.当然,也可以通过sql语句的方式来限定,但是关于这个细节,还是说明在这方面的人性化设计上需要加强.
2008-01-04 09:17:00 | [匿名:试卷]
#回复: 企业服务性能优化之使用 COM 可封送的参数 编辑
好深奥啊,真的!!!!!!!!!!1
2007-11-10 03:29:00 | [匿名:美容知识]
#回复: 企业服务性能优化之使用 COM 可封送的参数 编辑
呵呵,楼主的测试我有不同看法
2007-08-27 17:13:00 | [匿名:梁风飚]

发表留言

标题
姓名
邮件
主页
留言 

Powered by: Joycode.MVC引擎 0.5.2.0