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: Hello! This is not a ClearScript issue. Each invocation of the `V8ScriptEngine` constructor creates a V8 runtime, which reserves a block of address space between 16MB and 32MB in size, yielding a theoretical maximum of 128 instances in a 32-bit process (assuming 2GB of available address space), and a practical maximum significantly lower than that. When V8 is no longer able to reserve memory at startup, it crashes its host process. You can find a relevant discussion [here](https://groups.google.com/forum/#!topic/v8-users/VCy-_Ao4GIE). Some suggestions: * Be sure to [dispose](https://msdn.microsoft.com/en-us/library/system.idisposable.dispose(v=vs.110).aspx) your script engines when they're no longer in use. * Consider using a fixed-size of pool of script engines to run your script code. We recommend an instance count no greater than the number of CPU cores in your system. * It's possible for multiple script engines to share a V8 runtime (see ClearScript's `V8Runtime` class). Consider taking advantage of this capability if it makes sense for your application. * Consider switching to a 64-bit process. Good luck!

Viewing all articles
Browse latest Browse all 2297