欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用noesis.Javascript开源组件.Net中执行javascript脚本

程序员文章站 2024-02-26 18:37:22
界面如下: 然后,click filter button后的ui: 看,筛选出来了,代码如下(js能调c#写的userinfo类的各个属性) 复制代码 代码如下:pu...

界面如下:

利用noesis.Javascript开源组件.Net中执行javascript脚本

然后,click filter button后的ui:

利用noesis.Javascript开源组件.Net中执行javascript脚本

看,筛选出来了,代码如下(js能调c#写的userinfo类的各个属性)

复制代码 代码如下:

public class userinfo
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
        public int age { get; set; }
        public override string tostring()
        {
            return string.format("{0}, {1}: {2}", firstname, lastname, age);
        }
    }

private void btnsearch_click(object sender, eventargs e)
        {
            list<userinfo> users = filterusers(txtfilter.text.trim());
            lstusers.datasource = users;
        }

        private list<userinfo> filterusers(string jsfilter)
        {
            list<userinfo> results = new list<userinfo>();
            if (jsfilter.trim().length == 0)
                return this.users;

            try
            {
                using (javascriptcontext context = new javascriptcontext())
                {
                    foreach (userinfo user in this.users)
                    {
                        context.setparameter("user", user);
                        context.setparameter("isinclude", false);
                        string js = string.format(@"
                                                if({0})
                                                    isinclude=true;
                                                else
                                                    isinclude=false;", jsfilter);
                        context.run(js);
                        bool isinclude = (bool)context.getparameter("isinclude");
                        if (isinclude)
                            results.add(user);
                    }
                }
            }
            catch
            {
                txtfilter.focus();
                txtfilter.selectall();
                return this.users;
            }

            return results;
        }

我们来看看效率:

复制代码 代码如下:

private void btntest_click(object sender, eventargs e)
        {
            using (javascriptcontext context = new javascriptcontext())
            {
                stopwatch sw = new stopwatch();
                sw.start();
                int i=1000000;
                while(i-- > 0)
                {
                    context.setparameter("ii", 1);
                    context.setparameter("jj", 2);
                    context.setparameter("sum", 0);
                    string js = string.format(@"sum=ii+jj;");
                    context.run(js);
                    int sum = (int)context.getparameter("sum");
                }
                sw.stop();

                long usejs_total = sw.elapsedmilliseconds;
                float usejs_average = ((float)sw.elapsedmilliseconds) / 1000000;

                sw.reset();
                sw.start();
                i = 1000000;
                while (i-- > 0)
                {
                    int ii = 1;
                    int jj = 2;
                    int sum = 0;
                    sum = ii + jj;
                }
                sw.stop();

                long nousejs_total = sw.elapsedmilliseconds;
                float nousejs_average = ((float)sw.elapsedmilliseconds) / 1000000;

                string msg = "";
                msg += string.format("usejs_total: {0}\r\n", usejs_total);
                msg += string.format("usejs_average: {0}\r\n\r\n\r\n", usejs_average);
                msg += string.format("nousejs_total: {0}\r\n", nousejs_total);
                msg += string.format("nousejs_average: {0}\r\n\r\n\r\n", nousejs_average);

                messagebox.show(msg);
            }
        }

结果(上面的是通过js引擎计算的时间、下面的是纯c#计算时间,悲剧啊):这个noesis.javascript只适用于性能要求不高的场合

利用noesis.Javascript开源组件.Net中执行javascript脚本