好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#调用脚本语言(三) IronJS 与 IronLua 简单方法性能比较

C#调用脚本语言(三) IronJS 与 IronLua 简单方法性能比较

1.   测试环境

1.1. 硬件环境

CPU:intel Core i7-740QM

内存:8GDDR3 Memory

1.2. 系统

系统:Windows 8 Enterprise

1.3. 打开应用

IE(2个博客园页面),VS(2个),Word,QQ(2个),Kugoo,skyDriver,QQ管家,金山毒霸

1.4. 运行前硬件使用率

CPU:20%

内存:3.8G

2.   测试结果

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

测试脚本

IronJs

IronLua

测试情况

运行循环次数

平均每次运行时间

平均每次输出时间

平均每次运行时间

平均每次输出时间

脚本(3.1)

运行1次

运行10次

运行100次

脚本(3.2)

运行1次

运行10次

运行100次

脚本(3.3)

运行1次

运行10次

运行100次

脚本(3.4)

运行1次

运行10次

运行100次

脚本(3.5)

运行1次

运行10次

N/A

N/A

运行100次

N/A

N/A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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();

因此效率很低

 

 

分类:  C#

标签:  IronLua ,  C#调用脚本语言 ,  C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较 ,  IronJS 与 IronLua ,  IronJS 与 IronLua 比较 , IronJS ,  IronJS 与 IronLua 简单方法性能比较

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C#调用脚本语言(三) IronJS 与 IronLua 简单方法性能比较的详细内容...

  阅读:56次