C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较
2013-01-29 15:01
941 查看
1. 测试环境
1.1. 硬件环境
CPU:intel Core i7-740QM内存:8GDDR3 Memory
1.2. 系统
系统:Windows 8 Enterprise开发工具:Vs2012
1.3. 打开应用
IE(2个博客园页面),VS(2个),Word1.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 简单方法性能比较
- C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较
- c#调用脚本语言Lua——简单Demo
- C#调用脚本语言(一)-- IronLua基本语法
- c#调用脚本语言Lua——简单Demo
- C#调用脚本语言(二)-- IronJS基本语法
- 脚本语言性能比较:Ruby,Io,PHP,Python,Lua,Java,Perl...
- 比较简单的一个符合web标准的JS调用flash方法
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- C#使用技巧之调用JS脚本方法一
- c#调用脚本语言Lua
- C#使用技巧之调用JS脚本方法一
- c# winform窗体 调用js脚本语言,然后输出结果
- 比较简单的一个符合web标准的JS调用flash方法
- [Unity] .lua脚本调用C#方法的一小点坑
- C#使用技巧之调用JS脚本方法一
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
- C#使用技巧之调用JS脚本方法二