jint如何减慢它调用的纯clr代码

时间:2016-11-23 23:33:41

标签: c# jint

我最终把它减少到一个非常简单的测试(来自一个巨大的500,000线系统)。当我运行这个测试应用程序时

using Jint;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            var jint = new JintEngine();
            jint.DisableSecurity();
            jint.MaxStatements = 1000;
            jint.SetFunction("foo",new Action( Foo));
            jint.Run("foo();");
            Foo();
        }

        public static void Foo()
        {
            Debug.WriteLine("foo");

            var sw = new Stopwatch();
            sw.Start();
            for (int j = 0; j < 500000; j++)
            {
                var k = new Byte[50];
            }
            sw.Stop();
            Debug.WriteLine(sw.ElapsedTicks);
        }
    }
}

我明白了

foo
55150
foo
13279

请注意,唯一的区别是第一个Foo调用是由jint调用的,第二个是直接调用的。 Foo中的循环中没有涉及jint / js / etc.通过jint调用时,运行代码需要2到3倍的时间!

感觉就像jint在环境中插入一些东西,当它在堆栈中时会减慢速度,但是我看不清楚是什么。它有一些CAS电话,我拿出来,没有什么区别。我很难过。

这真的感觉就像CAS的东西,但我不能让它表现得一致。

0 个答案:

没有答案