Slow initialization when getting Jint instance
bakkar1989 opened this issue · comments
I am trying to make use of Jint object to pass a custom variable from c# to javascript.
When calling the method "GetOrCreateJint" to get the instance it slows down by 300 - 400 ms on my laptop.
Also i tried to create 100 instances to use as pooling but its taking over 2GB of memory.
Are these two scenarios expected or there is a workaround?
static List<(IDocument Dom, Engine Js)> engineList = new List<(IDocument Dom, Engine Js)>();
public static void TestSpeed()
{
for (int i = 0; i < 100; i++)
{
Stopwatch sw = new Stopwatch();
sw.Start();
var config = Configuration.Default.WithJs();
var context = BrowsingContext.New(config);
var jsEngine = context.GetService<JsScriptingService>();
var doc = context.OpenAsync(req => req.Content("<html><head></head><body></body></html>")).Result;
// slow loading
var engine = jsEngine.GetOrCreateJint(doc);
engine.SetValue("myVar", "value");
// 100 instances == 2Gb Memory
engineList.Add((doc, engine));
sw.Stop();
Console.WriteLine(i + " - " + sw.ElapsedMilliseconds);
}
Console.ReadLine();
}
There is quite some lookup and mapping done when the whole instance is scaffolded. Depending on your .NET runtime this may take a while.
So its expected to eat memory and to take a while. I guess it could be reduced a bit, but not by much as some of the boundary conditions (managed code, dynamic integration, interpreter) cannot be taken away.