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. arcgis中注记的高级处理

    在实际制图过程中,常遇到一个图层的多个要素展示,将标注转换为注记的之后,可以对注记进行移动调整位置等手动更改.这样为避免重复地移动注记位置.可以采用如下方案: 1.将图层标注转换为注记 2.将注记存储 ...

  2. aliyun install php apache mysql nginx

    yum install httpd -y yum install mysql mysql-server -y yum install php-mysql php-pgsql php-pecl-mong ...

  3. Python运行Google App Engineer时出现的UnicodeDecodeError错误解决方案

    #Python运行Google App Engineer时出现的UnicodeDecodeError错误解决方案   ##问题描述 使用Python2.7.x运行GAE时有时会报这个错误 ```py ...

  4. C#全局作用符::

    比如说你在全局定义了一个变量str,然后在函数里面又定义了这个str名字的变量的,这个时候你要是在函数里面直接写str,那么就是访问的函数内部的变量的.无法访问外部变量的.这是正常的现象的.但是如果你 ...

  5. html 元素 变小手

    要设置鼠标指针放在一个元素边界范围内时所用的光标形状,需要对元素的css属性cursor进行设置.cursor属性可能的值1.default 默认光标(通常是一个箭头)2.auto 默认.浏览器设置的 ...

  6. 26.68013 烧录方式 及iic生成

    硬件程序烧录 1)因为本产品要求将二进制代码和硬件PID/VID烧录在EEPROM,而不是使用CYPRESS推荐的在线下载方式,所以外部采用了8K的EEPROM.上电后68013A会将EEPROM中的 ...

  7. PBOC2.0与PBOC3.0的区别

    2013年2月,中国人民银行发布了<中国金融集成电路(IC)卡规范(V3.0)>(以下简称PBOC3.0),PBOC3.0是在中国人民银行2005年颁布的<中国金融集成电路(IC)卡 ...

  8. c++中的virtual函数,即虚函数

    c++中的虚函数主要是用来实现多态的,虽然都同时指向父类的实例.但调用的确实子类的函数,这个有点像java的接口和实现的关系了.一个接口有多种实现,一个接口对象调用的是哪个实现的方法,这个就是多态了 ...

  9. algorithm之不变序列操作

    概述:不变序列算法,参见http://www.cplusplus.com/reference/algorithm/ /* std::for_each template <class InputI ...

  10. java笔试题(4)

    abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? abstract的method 不可以是static的,因为抽象的方法是要被子 ...