zoukankan      html  css  js  c++  java
  • C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较

    1.   测试环境

    1.1. 硬件环境

    CPU:intel Core i7-740QM

    内存:8GDDR3 Memory

    1.2. 系统

    系统:Windows 8 Enterprise

    开发工具:Vs2012

    1.3. 打开应用

    IE(2个博客园页面),VS(2个),Word

    1.4. 运行前硬件使用率

    CPU:20%

    内存:3.8G

     

    2.   测试结果

    以下测试结果取平均值,单位毫秒

    测试脚本

    IronJs

    IronLua

    测试情况

    运行循环次数

    平均每次运行时间

    平均每次输出时间

    平均每次运行时间

    平均每次输出时间

    脚本(3.1)

    运行1次

    3936.5601

    3754.5366

    181.0706

    39.0323

    运行10次

    3506.2967

    3486.4970

    53.4373

    38.0273

    运行100次

    3322.4955

    3319.3787

    42.0150

    39.4533

    脚本(3.2)

    运行1次

    6402.9010

    6182.8698

    5030.6448

    4863.6206

    运行10次

    5426.4275

    5403.8228

    2720.1465

    2702.3338

    运行100次

    5264.9106

    5261.5463

    2305.2731

    2302.2437

    脚本(3.3)

    运行1次

    4829.6195

    4395.5726

    203.9511

    64.0034

    运行10次

    4260.7406

    4216.1312

    73.1036

    57.5132

    运行100次

    4219.6828

    4214.0657

    57.9017

    54.8742

    脚本(3.4)

    运行1次

    6496.8492

    6259.8139

    6031.8009

    5670.7524

    运行10次

    5584.7426

    5559.5219

    3010.6005

    2973.0923

    运行100次

    5364.0077

    5359.9148

    1889.2121

    1884.3506

    脚本(3.5)

    运行1次

    152999.6867

    152859.6952

    813.1022

    445.0527

    运行10次

    N/A

    N/A

    475.7581

    437.5456

    运行100次

    N/A

    N/A

    437.1177

    431.8419

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

     


     

    3.   测试代码

    3.1. C#调用脚本方法,输出,无参

    3.1.1.   IronJS

      var v = new IronJS.Hosting.CSharp.Context();

      v.CreatePrintFunction();

     

      v.Execute("function GetFunction(){ var v = 1;}");

      for (int i = 0; i < 10000; i++)

      {

          v.GetFunctionAs<Printdel>("GetFunction")();

      }

     

    delegate dynamic Printdel()

    3.1.2.   IronLua

      Lua luaVM = new Lua();

      luaVM.DoString("function GetFunction() a=10 end");

     

      for (int i = 0; i < 10000; i++)

      {

           luaVM.GetFunction("GetFunction").Call();

      }

     

    3.2. C#调用脚本方法,输出,无参

    3.2.1.   IronJS

      var v = new IronJS.Hosting.CSharp.Context();

      v.CreatePrintFunction();

     

      v.Execute("function GetFunction(){ print(1);}");

      for (int i = 0; i < 10000; i++)

      {

          v.GetFunctionAs<Printdel>("GetFunction")();

      }

     

    delegate dynamic Printdel()

    3.2.2.   IronLua

      Lua luaVM = new Lua();

      luaVM.DoString("function GetFunction() print(1) end");

     

      for (int i = 0; i < 10000; i++)

      {

           luaVM.GetFunction("GetFunction").Call();

      }

     

    3.3. C#调用脚本方法,输出,值类型参数

    3.3.1.   IronJS

      var v = new IronJS.Hosting.CSharp.Context();

      v.CreatePrintFunction();

     

      v.Execute("function GetFunction(i){ var v = i;}");

      for (int i = 0; i < 10000; i++)

      {

          v.GetFunctionAs<Printdel>("GetFunction")(i);

      }

     

    delegate dynamic Printdel(dynamic i)

    3.3.2.   IronLua

      Lua luaVM = new Lua();

      luaVM.DoString("function GetFunction(i) a=i end");

     

      for (int i = 0; i < 10000; i++)

      {

           luaVM.GetFunction("GetFunction").Call(i);

      }

    3.4. C#调用脚本方法,输出,值类型参数

    3.4.1.   IronJS

      var v = new IronJS.Hosting.CSharp.Context();

      v.CreatePrintFunction();

     

      v.Execute("function GetFunction(i){ print(i); }");

      for (int i = 0; i < 10000; i++)

      {

          v.GetFunctionAs<Printdel>("GetFunction")(i);

      }

     

    delegate dynamic Printdel(dynamic i)

    3.4.2.   IronLua

      Lua luaVM = new Lua();

      luaVM.DoString("function GetFunction(i) print(i) end");

     

      for (int i = 0; i < 10000; i++)

      {

           luaVM.GetFunction("GetFunction").Call(i);

      }

    3.5. 脚本调用C#方法,输出,值类型参数

    3.5.1.   IronJS

    var v = new IronJS.Hosting.CSharp.Context();

    Action<string> action1 = new Action<string>((str) => { Console.WriteLine(str);});

     

    FunctionObject fun = IronJS.Native.Utils.createHostFunction(v.Environment, action1);

     

    v.SetGlobal("print", fun);

     

    for (int i = 0; i < 10000; i++)

    {

    v.Execute(string.Format("print({0});",i));

    }

    3.5.2.   IronLua

    Lua luaVM = new Lua();

    luaVM.RegisterFunction("Sleep2", this, this.GetType().GetMethod("LuaSleep"));

     

    for (int i = 0; i < 10000; i++)

    {

    luaVM.DoString("Sleep2(0)");

    }

     

    (由于时间关系,并未做太多测试,仅仅列出简单形式)

     

    PS:

    由于本次测试是为接下来的代码脚本化做基础,

    所以IronJs调用方法:

    定义:v.Execute("function GetFunction(){ print(1);}");

    获取、执行:v.GetFunctionAs<Printdel>("GetFunction")();

    并非如下形式:

    定义:dynamic dy = v.Execute("function GetFunction(){ print(1);}");

    执行:dy();

    因此效率很低

  • 相关阅读:
    HDU-6534-Chika and Friendly Pairs (莫队算法,树状数组,离散化)
    SPOJ-DQUERY-D-query
    视频上云/网络穿透/拉转推工具EasyNTS设备IP地址返回数据与实际IP匹配的筛选机制优化
    视频上云/网络穿透/拉转推工具EasyNTS新增获取windows所有盘符信息功能的实现
    【解决方案】热门景区实现智慧旅游,城市道路/风景区视频公众号分享该如何实现?
    TSINGSEE青犀视频开发webrtc使用ffmpeg编译报ffmpeg version: N-94448-G3CEA9CD219提示是什么原因
    TSINGSEE青犀视频开发webrtc浏览器使用video标签播放webrtc本地录音音频实现过程
    【解决方案】智慧农业自动化的浪潮下,大棚实时视频监控系统应该如何搭建?
    【解决方案】房地产行业施工现场搭建视频4G无线远程视频监管信息化行业应用方案建议书
    【解决方案】国标GB28181协议视频智能分析平台EasyCVR搭建智慧养殖平台,让畜牧业实现“万物互联”
  • 原文地址:https://www.cnblogs.com/mingyongcheng/p/3146993.html
Copyright © 2011-2022 走看看