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

因此效率很低

C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较的更多相关文章

  1. Java动态调用脚本语言Groovy

    Java动态调用脚本语言Groovy 2019-05-15 目录 0. pom.xml添加依赖1. 使用GroovyShell计算表达式2. 使用GroovyScriptEngine脚本引擎加载Gro ...

  2. LoadRunner脚本关联动态数据的最简单方法

    为什么要关联动态数据呢?举个例子,在对我们平台的工作流性能测试时, 在待办任务里面选择一条记录执行发送操作,LoadRunner VuGen会详细记录下来流程发送操作的细节,但在回放脚本的时候会有问题 ...

  3. 常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript

    常用脚本语言Perl,Python,Ruby,Javascript一 Perl,Python,Ruby,Javascript Javascript现阶段还不适合用来做独立开发,它的天下还是在web应用 ...

  4. 使用bison和yacc制作脚本语言(1)

    使用bison和yacc制作脚本语言(1) 环境: 环境 windows 10 Cygwin64 语言 C 工具 mingw bison flex 主要是使用bison和flex这两个软件,编译器无所 ...

  5. java 计算数学表达式及执行脚本语言

    java SE6中对常用的脚本语言做了支持. 可供使用者在java代码中执行脚本语言,还可以利用get("key"),put("key","value ...

  6. Unity3d中如何混用三种脚本语言?

    首先要明白,这三种说的混用是指文件级别的混用,就是说一个文件是由一种语言写的.而不是说你这一个文件可以混用这三种语言,注意这是不允许的. 第二要明白,在unity3d中为什么可以使用三种语言混合开发? ...

  7. 脚本语言丨Batch入门教程第四章:调用与传参

    今天是Batch入门教程的最后一章内容:调用与传参.相信通过前面的学习,大家已经掌握了Windows Batch有关的基础知识和编程方法,以及利用Windows Batch建立初级的编程思维方式.今后 ...

  8. 脚本语言:Xmas(三)

    自从将Xmas的GC换成现在的非迁移式的全局收集器后,最近几个月一直耗在Xmas上面:最明显的改变就是:更彻底地支持了面向对象.更强大的编译器. 所以,本文就来说说,真正的Xmas. 一.目标 一门语 ...

  9. shell脚本中调用其他脚本的三种方法

    方法一:使用 .     #. ./sub.sh 方法二:使用 source    #source ./sub.sh 方法三:使用 sh    #sh ./sub.sh 注意: 1.两个点之间,要有空 ...

随机推荐

  1. Xhprof安装笔记(PHP性能监控)

    由facebook开源出来的一个PHP性能监控工具,占用资源很少,甚至能够在生产环境中进行部署.它可以结合graphviz使用,能够以图片的形式很直观的展示代码执行耗时 wget http://pec ...

  2. JSON对象和String之间的互转及处理

    如题,本文列举了一些在web前端开发中常用的转换及处理方式.使用JSON而不是字符串,主要是为了方便处理. JSON:JavaScript 对象表示法(JavaScript Object Notati ...

  3. Android 编译使用高版本的Java

    讨论的链接 http://bbs.csdn.net/topics/390977000 问题很容易解决,就是sdk\tools\ant\build.xml里面的配置不对,把 <property n ...

  4. android开发分辨率问题解决方案

    dpi是什么呢?dpi是“dot per inch”的缩写,每英寸像素数.四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extr ...

  5. WebStorm mac 下载地址及注册码

    webStorm : UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA  ...

  6. mysql查看日志

    工具:mysqlbinlog, 在bin目录中日志在data目录中 日志过滤:mysqlbinlog mysql-bin.000011 | less mysqlbinlog mysql-bin.000 ...

  7. 联想Z470安装10.11懒人版成功!!特此分享!!

    折腾黑苹果也断断续续好几个月了,在远景也爬了好多贴,遇到问题基本上靠自己解决,自己组的台式机已基本完美,大学期间买的联想Z470现在是“食之无味,弃之可惜”,想想也来试试装个黑苹果玩玩,之前装过10. ...

  8. verilog 奇数分频设计

    module tw(clk,k_or,k1,k2); input clk; output k_or,k1,k2; reg [2:0] c1,c2; reg m1,m2; initial begin c ...

  9. JS全局屏蔽回车事件

    window.onload = function (){ document.body.onkeydown=function(event){ if(event.keyCode==13){ event.k ...

  10. 函数 swift

    func add(a:Int,b:Int)->Int { return a+b }