• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
编写人生
写写代码,写写人生
博客园    首页    新随笔    联系   管理    订阅  订阅
MarshalByRefObject 的性能损失

以前看过文章说MarshalByRefObject 会造成性能的损失,我比较相信自己,所以亲自测试了一下,下面是代码:

测试代码
using System;
using System.Diagnostics;

namespace ConsoleApplication1 {
    
class Program {
        
static void Main(string[] args) {
            Stopwatch watch 
= new Stopwatch();
            watch.Start();
            B b 
= new B();
            
for (int i = 0; i < 100000000; i++) {
                b.Add(
3, 5);
            }

            watch.Stop();
            Console.WriteLine(
"B 花费时间:" + watch.ElapsedMilliseconds.ToString());
            watch.Reset();

            watch.Start();
            A a 
= new A();
            
for (int i = 0; i < 100000000; i++) {
                a.Add(
3, 5);
            }

            watch.Stop();
            Console.WriteLine(
"A MarshalByRefObject 花费时间:" + watch.ElapsedMilliseconds.ToString());
            watch.Reset();

            
//=======================
            watch.Start();
            a 
= new A();
            
for (int i = 0; i < 100000000; i++) {
                a.Add(
3, 5);
            }

            watch.Stop();
            Console.WriteLine(
"A MarshalByRefObject 花费时间:" + watch.ElapsedMilliseconds.ToString());
            watch.Reset();

            watch.Start();
            b 
= new B();
            
for (int i = 0; i < 100000000; i++) {
                b.Add(
3, 5);
            }

            watch.Stop();
            Console.WriteLine(
"B 花费时间:" + watch.ElapsedMilliseconds.ToString());
            watch.Reset();
            Console.Read();
        }

    }


    
class A : MarshalByRefObject {
        
public int Add(int a, int b) {
            
return a + b;
        }

    }


    
class B {
        
public int Add(int a, int b) {
            
return a + b;
        }

    }

}


测试的结果是:
 B 花费时间:55
A MarshalByRefObject 花费时间:957
A MarshalByRefObject 花费时间:972
B 花费时间:56
                  

总结:像这样在本地环境下,性能仍然损失了近17.4倍。当然,此17被不能简单的理解为你的应用就慢了17倍,这里仅表示发起调用损失了17倍。

注意:

执行测试程序时,首先选择Release,然后选择项目的属性=》Build(编译)=》高级=》调试信息 设置为none。
然后选择:调试=》不调试运行。或找到exe直接双击运行。

posted on 2008-04-29 15:20  编写人生  阅读(1808)  评论(6)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3