noesis.Javascript 오픈 소스 구성 요소.Net 에서 javascript 스 크 립 트 를 실행 합 니 다.
그리고 click filter button 후의 UI:
보 세 요.코드 는 다음 과 같 습 니 다.
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
", useJS_Total);
msg += string.Format("useJS_Average: {0}\r
\r
\r
", useJS_Average);
msg += string.Format("nouseJS_Total: {0}\r
", nouseJS_Total);
msg += string.Format("nouseJS_Average: {0}\r
\r
\r
", nouseJS_Average);
MessageBox.Show(msg);
}
}
결과(위 는 js 엔진 을 통 해 계 산 된 시간,아래 는 순 C\#시간 계산,비극 아):이 Noesis.Javascript 은 성능 요구 가 높 지 않 은 장소 에 만 적 용 됩 니 다