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. JavaScript高级程序设计之Date类型

    ECMAScript 中的 Date 类型是在早期 Java 的 java.util.Date 类基础上构建的. Date 类型使用自 UTC (国际协调时间)1970年1月1日午夜(零时)开始经过的 ...

  2. [译]rabbitmq 2.5 Where’s my message? Durability and you

    我对rabbitmq学习还不深入,这些翻译仅仅做资料保存,希望不要误导大家. There’s a dirty secret about creating queues and exchanges in ...

  3. Hadoop组成

    Hadoop由以下几个子项目组成: Hadoop Common Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等. Avro Avro是doug cutt ...

  4. Effective Objective-C 2.0之Note.04

    “类族”(class cluster)是一种很有用的模式(pattern),可以隐藏“抽象基类”(abstract base class)背后的实现细节.Objective-C的系统框架中普遍使用此模 ...

  5. 10个 iOS 用户暂可以嘲笑 Android 的特点

    Android 与 iOS 设备之间的争斗从未停止,毕竟一切高科技产品的理念和实际表现方式都不相同.就拿 Android 来说,很多功能令用户并 不太开心,甚至是令人愤怒,下面让我们来简单的盘点 10 ...

  6. [转]40多个关于人脸检测/识别的API、库和软件

    [转]40多个关于人脸检测/识别的API.库和软件 http://news.cnblogs.com/n/185616/ 英文原文:List of 40+ Face Detection / Recogn ...

  7. iOS 进阶 第二十天(0520)

    0520 -KVO 如下图所示:(面试可能会问到,你就按照下面的说) 注意:NSString类型的成员变量用set方法时,要记得用copy,至于为什么,知道这么用就行了.如下图:

  8. opencv颜色识别代码分享

    android 平台 opencv 实现颜色识别代码:http://www.eyesourcecode.com/thread-40682-1-1.htmlopencv的颜色识别简单实现的代码:http ...

  9. 与电子钱包相关的APDU指令

    CLS:命令报文的类别字节,class byte(类别字节) of command message(命令报文) UranusPay ED/EP: UranusPay是HB公司开发的COS,而ED是电子 ...

  10. Log4Net学习【二】

    Log4Net结构详解 当我们在描述为系统做日志这个动作的时候,实际上描述了3个点:做日志,其实就是在规定,在什么地方 用什么日志记录器 以什么样的格式做日志.把三个最重要的点抽取出来,即什么地方,日 ...