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: Hi Eric, ​ >I tried the CollectGarbage routine and that unfortunately did not work. ​ We've run a few tests, and you're right; periodically forcing V8 garbage collection makes only a small difference in this scenario. It looks like creating an engine always leaks around a half-megabyte of V8 runtime heap. This may or may not be a ClearScript issue; we're investigating. In any case, creating a large number of engines that share a small number of runtimes may not be the right approach for you. Runtimes are single-threaded, so engines that share a runtime can't execute script code concurrently. Can you say more about what kind of script code your application will run? For example, will your scripts be long-running? Can each script be trusted to leave the engine in a good state for running other scripts? Thanks!

Viewing all articles
Browse latest Browse all 2297