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

我们来到郊外。啊,这是多美的 "绿毯 "呀!绿油油的,上面还挂着一颗颗晶莹的 "珍珠 ",太阳升起来, "珍珠 "就发出了彩虹似的光芒,不一会儿就消失了。我想:小 "珍珠 "一定是架起彩虹桥去太阳神的皇宫了。这时,一股股幽香扑入我的鼻中,好香啊,走,去瞧瞧。我们先来到一株红梅前,那梅花正开得灿烂,并且还散出阵阵清香。梅花的颜色也许只有九天的织女用早晨的红霞和晴午的白云在天机上织的轻绢,才可以比拟吧。我们又来到迎春花旁,迎春花正在开花。

界面如下:

然后,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只适用于性能要求不高的场合

到此这篇关于利用noesis.Javascript开源组件.Net中执行javascript脚本就介绍到这了。流过泪的眼睛更明亮,滴过血的心灵更坚强!更多相关利用noesis.Javascript开源组件.Net中执行javascript脚本内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

您可能有感兴趣的文章
.NET 开源项目Polly的简单介绍

.NET 开源配置组件 AgileConfig的使用简介

开源跨平台运行服务插件TaskCore.MainForm

生成二维码的开源工具对比(附源码)

详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)