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. DB2中的转义字符

    1.数据库脚本 )); ,'20%'); ,'OLIVER_QIN'); ,'AA''') 2.以下是DB2的转义字符 2.1 对“%”的转义 SELECT * FROM OLIVER_11 WHER ...

  2. Android 文档之viewAnimator

    一.结构 public class ViewAnimator extends FrameLayout java.lang.Object android.view.View android.view.V ...

  3. node.js的学习

    require('http') 内置模块 server.js var http = require('http'); function start(){ server = http.createSer ...

  4. iOS学习之基础控件

    一.UILabel      1.UILabel(标签):是显示文本的空间.在App中UILabel是出现频率最高的控件.      2.UILabel是UIView的子类,作为子类一般是为了扩充父类 ...

  5. linux CentOS 系统下如何将php和mysql命令加入到环境变量中

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...

  6. 浅谈.NET中闭包

    什么是闭包 闭包可以从而三个维度来说明.在编程语言领域,闭包是指由函数以及与函数相关的上下文环境组合而成的实体.通过闭包,函数与其上下文变量之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程 ...

  7. Filter介绍

    Filter可人为是Servlet的一种“加强版”,它重要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链.使用Filter的完整的流程是:Filt ...

  8. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  9. 内部类&匿名内部类

    内部类:如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内 ...

  10. SQL Server 2008 没有可用于 charge_sys_Log.LDF 的编辑器

    因为上网问题重新装了系统.今天在整 SQL Server  的时候出现了这样一个问题. 因为之前装 SQL Server  的时候没有遇到过这种情况,感觉很新奇.所以详细的记录一下,希望对别人能有一定 ...