public async Task Stress_Vm_FromStrategy(int childrenCount, int rank, IJavascriptObjectBuilderStrategyFactory strategyFactory) { var root = new SimpleFatherTestViewModel(); var test = new TestInContextAsync() { Bind = (win) => HtmlBinding.Bind(win, root, JavascriptBindingMode.TwoWay, strategyFactory), Test = async(mb) => { var bigVm = SimpleReadOnlyTestViewModel.BuildBigVm(childrenCount, rank); var js = mb.JsRootObject; var stopWatch = new Stopwatch(); stopWatch.Start(); await DoSafeAsyncUI(() => root.Other = bigVm); await Task.Delay(DelayForTimeOut); var other = await _WebView.EvaluateAsync(() => GetAttribute(js, "Other")); stopWatch.Stop(); var ts = stopWatch.ElapsedMilliseconds - DelayForTimeOut; _Logger.Info($"Perf: {((double)(ts)) / 1000} sec"); other.IsObject.Should().BeTrue(); } }; await RunAsync(test); }
public async Task Stress_Big_Vm(int childrenCount) { var root = new SimpleFatherTestViewModel(); var test = new TestInContextAsync() { Bind = (win) => HtmlBinding.Bind(win, root, JavascriptBindingMode.TwoWay), Test = async mb => await StressVm(root, mb, SimpleReadOnlyTestViewModel.BuildBigVm(childrenCount)) }; await RunAsync(test); }
public void Map_performance_test() { var converter = GetCSharpToJavascriptConverterForPerformance(); var vm = SimpleReadOnlyTestViewModel.BuildBigVm(); using (GetPerformanceCounter("ToJson large Vm")) { var res = JsonConvert.SerializeObject(vm); } using (GetPerformanceCounter("Map large Vm")) { var res = converter.Map(vm); } }
private async Task StressVm(SimpleFatherTestViewModel root, IHtmlBinding mb, SimpleReadOnlyTestViewModel bigVm) { var js = mb.JsRootObject; IJavascriptObject other; using (var perf = GetPerformanceCounter("Perf to bind Vm")) { await DoSafeAsyncUI(() => root.Other = bigVm); await WaitAnotherUiCycleAsync(); await Task.Delay(DelayForTimeOut); perf.DiscountTime = DelayForTimeOut; other = await _WebView.EvaluateAsync(() => GetAttribute(js, "Other")); } other.IsObject.Should().BeTrue(); var rootJs = mb.JsBrideRootObject; ISet <IJsCsGlue> allChildren = new HashSet <IJsCsGlue>(); using (GetPerformanceCounter("Perf to VisitAllChildren")) { await DoSafeAsyncUI(() => rootJs.VisitDescendantsSafe(glue => true)); } using (GetPerformanceCounter("Perf to VisitAllChildren Collect")) { await DoSafeAsyncUI(() => rootJs.VisitDescendantsSafe(glue => allChildren.Add(glue))); } _TestOutputHelper.WriteLine($"Objects created {allChildren.Count}"); using (GetPerformanceCounter("Perf Foreach GetAllChildren")) { await DoSafeAsyncUI(() => allChildren.ForEach(_ => { })); } List <object> basics = null; using (GetPerformanceCounter("Perf Collecting basics")) { basics = allChildren.Where(g => g.Type == JsCsGlueType.Basic && g.CValue != null).Select(g => g.CValue).ToList(); } string string1, string2, string3, string4; using (GetPerformanceCounter("Creating string")) { string1 = $"[{string.Join(",", basics.Select(JavascriptNamer.GetCreateExpression))}]"; } using (GetPerformanceCounter("Creating string parralel")) { var builder = new StringBuilder("["); var first = true; Parallel.ForEach(basics, () => new Builder(), (basic, _, sb) => { if (!sb.First) { sb.String.Append(","); } sb.String.Append(basic); sb.First = false; return(sb); }, (sb) => { lock (builder) { if (!first) { builder.Append(","); } first = false; builder.Append(sb.String); } }); builder.Append("]"); string2 = builder.ToString(); } var array = basics.ToArray(); using (GetPerformanceCounter("Creating JSON string")) { string3 = JsonConvert.SerializeObject(array); } using (GetPerformanceCounter("Creating JSON string bigVm")) { string4 = JsonConvert.SerializeObject(bigVm); } }