当前位置: 移动技术网 > IT编程>开发语言>.net > 利用noesis.Javascript开源组件.Net中执行javascript脚本

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

270004,147人体艺高清大图,taskman.exe

界面如下:

然后,click filter button后的ui:

看,筛选出来了,代码如下(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只适用于性能要求不高的场合

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网