热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

测试了几款C#脚本引擎,Jint,Jurassic,Nlua,ClearScript

测试类publicclassScript_Common{publicstringread(stringfilename){returnSystem.IO.File.ReadAllT

测试类

    public class Script_Common
    {
        public string read(string filename)
        {
            return System.IO.File.ReadAllText(filename);
        }
        public void log(object obj)
        {
            Console.WriteLine(obj.GetType() + " - " + obj);
        }
        public void demo(params object[] items)
        {
            log(string.Join(" - ", items));
        }
        public void demo2(string def = "ddddddddddd")
        {
            log(def);
        }
        public void demo3(string val)
        {
            log(val);
        }
        public void demo3(int val)
        {
            log(val);
        }
        public Regex Regex(string pattern)
        {
            return new Regex(pattern);
        }
        public Match Match(string input,  string pattern)
        {
            return System.Text.RegularExpressions.Regex.Match(input, pattern);
        }

        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();  
        public void time1()
        {
            log("计时开始 :");
            stopwatch.Restart();
        }
        public void time2()
        {
            stopwatch.Stop();
            log("记时结束 : " + stopwatch.ElapsedMilliseconds + " 毫秒");
        }
    }

测试脚本 

t.time1();                              //计时开始
htm = t.read(‘d:/nn2log.txt‘)

for( var i = 0 ; i <10000; i++)
{
    var r = new RegExp(‘[a-z]+‘);
    htm += r.exec(htm).length
}

t.time2();                              //计时结束
t.log(htm.length)

t.demo(11,22,33,44,55)       //测试是否支持 params
t.demo2() //测试是否支持 默认参数 t.demo2(‘ddddddddddddd‘)

t.demo3(111) //测试是否支持 多方法 这个很重要,JS 调用 C#方法的时候,C# 的很多方法都是多方法定义的..如果不支持 可能 不能调用成功.
t.demo3(‘dddddddd‘)

脚本测试结果 

Jint   支持 params   , 不支持默认参数,  不支持多方法,    

Jurassic   支持 params   , 不支持默认参数,  支持多方法,   

Nlua        支持 params   , 支持默认参数,  支持多方法,   

ClearScript        支持 params   , 支持默认参数,  支持多方法,   

ClearScript        是使用 "JScriptEngine" 方式测试的, 没有使用V8引擎, mono 上好像使用不了,就没有测试呢.

性能方面, 大概的是    

Nlua  or  Jurassic    >   ClearScript  or   Jint   

大概只测试几个 字符串操作 和 正则表达式方面的循环操作,测试不算全面.

ClearScript 在使用JS的 RegExp 的时候性能是最好的,  ,但是加了一句 C#的 var rr = t.Regex( ‘[a-z]+ ‘)  后性能就很不好,不知道为啥. 

项目维护方面.

Nlua  or  ClearScript  or  Jint   >  Jurassic      

Nlua  or  ClearScript  or  Jint   这3个一直都在更新维护

Jurassic  有2年都没有更新了, 但是测试后感觉还是很不错,  兼容性+ , 性能 也还行, 

兼容性方面 

Nlua or  jint or  Jurassic    > ClearScript  

Nlua  需要调用2-3个DLL, 多平台支持..IOS,LINUX ,windows

Jint     Jurassic     都是一个DLL,使用纯C#写的, 兼容性应该还行, Linux 上面没有测试过, 不过看了 Mono 的文档,应该是支持的.

ClearScript   使用JScript  模式只有一个DLL就够了,但是好像调用了系统接口, 跨平台不知道怎么样,   V8模式 需要调用 2-5个DLL, 而且V8引擎是用VS2013编写的.还需要安装VC运行库...感觉引擎还是用C#写比较好,异常捕获呀那些的都方便一些.

技术分享

 技术分享

http://www.okbt.net/ 磁力搜索引擎,使用C# + Python 开发. Aspx运行在 Linux上面.

测试了几款 C# 脚本引擎 , Jint , Jurassic , Nlua, ClearScript


推荐阅读
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在最近的项目中,我们广泛使用了Qt框架的网络库,过程中遇到了一些挑战和问题。本文旨在记录这些经验和解决方案,以便日后参考。鉴于我们的客户端GUI完全基于Qt开发,我们期望利用其强大的网络功能进行Fiddler网络数据包的捕获与分析,以提升开发效率和应用性能。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 题目要求解决一个有趣的编程挑战,即计算由四个自然数 \( p, q, r, s \) 组成的分数序列的和。具体来说,需要编写一个 C# 程序来处理这些自然数,并通过特定的数学运算得出最终结果。该任务不仅考验编程技能,还涉及对数学公式的理解和应用。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
author-avatar
杭州琦琦妈_120
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有