Quantcast
Channel: ClearScript
Viewing all articles
Browse latest Browse all 2297

Commented Issue: Continuous Allocation of V8ScriptEngine Can Crash Application [106]

0
0
When allocating a V8ScriptEngine objects within a loop causes memory to remain allocated even if you force all references to the object to null and eventually crashes the application with a System.AccessViolationException. The details of the crash is below.

_Currently coding against version 5.4.5.0 of ClearScript._

__This Code Snippet Fails (Normally at iteration 134 the failure occurs)__
for (int i = 1; i <= 1000; i++)
{
var v8Engine = new Microsoft.ClearScript.V8ScriptEngine();
v8Engine = null;
}

__This Code Snippet Works:__
for (int i = 1; i <= 1000; i++)
{
var v8Engine = new Microsoft.ClearScript.V8ScriptEngine();
v8Engine = null;
//Invoking Garbage Collection Every 50 V8ScriptEngine object allocated
//Fixes the issue
if(i%50 == 0)
GC.Collect();
}

__Here are the details of the crash:__
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: ClearScriptDemo.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 572a5c94
Problem Signature 04: ClearScriptV8-32
Problem Signature 05: 5.4.5.0
Problem Signature 06: 56e184c1
Problem Signature 07: e6
Problem Signature 08: 78
Problem Signature 09: System.AccessViolationException
OS Version: 6.1.7601.2.1.0.256.4
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Comments: Thanks for looking into the memory issue. Let me know what you find. Regarding the scripts, we plan to use scripting for custom calculations on internal objects. Our approach is to link object instances with script identifiers via the AddHostObject() function. The calculation scripts should be very short lived. In the event the script is not short lived, we plan to take advantage of the V8ScriptEnging.Interrupt() function to limit the amount of time a script runs. Based on your feedback it sounds like we need to create a pool of V8Runtime objects that matches the number of cores on the target system, and then distribute the creation of engines evenly against the allocated V8Runtimes. So in essence we would queue engine objects, and then process each engine sequential order per V8Runtime. Does that sound feasible?

Viewing all articles
Browse latest Browse all 2297