Comments (6)
Hi @Muchaszewski,
First, your CreateObject
method could simply be this:
public static object CreateObject(string document)
{
return _engine.Evaluate(document);
}
Second, how do setScriptData
and getScriptData
work?
from clearscript.
Thanks for a tip.
Those methods are pretty straightforward. Just dictionary storage.
public Dictionary<string, object> ScriptResults = new Dictionary<string, object>();
public void setScriptData(string name, object value)
{
ScriptResults[name] = value;
}
public object getScriptData(string name)
{
if (ScriptResults.ContainsKey(name))
{
return ScriptResults[name];
}
return null;
}
from clearscript.
@Muchaszewski, is it possible that, when your script calls getScriptData
, it gets an object that was created by a different instance of V8ScriptEngine
? That would explain what you're seeing.
A script engine cannot be given direct access to an object created by another script engine, so ClearScript provides a proxy that marshals invocations across script engine boundaries. JavaScript's typeof
always returns "function" when applied to a ClearScript proxy.
Note that, although ClearScript supports this setup, it isn't recommended. Invocations across script engines incur heavy overhead, and the full capabilities of the target object may not be accessible.
If the object belongs to the same script engine, ClearScript should hand it off without a proxy, resulting in the expected behavior. Please let us know if that's not the case.
from clearscript.
I confirm that the case. CreateObject
is using a different instance of V8ScriptEngine. This is due to the limitation I have encountered. Settings up Engine.MaxRuntimeStackUsage = 50
and invoking CreateObject
always created stack overflow on complicated enough objects, or when reaching stack limit and trying to create anything.
My idea to prevent developers from passing object from different instances of an engine, and making them wonder about errors that can occur from that, simple check and a setting for instantiation of an engine.
Engine = new V8ScriptEngine();
Engine.AllowProxyObjects = true; //Default is false
from clearscript.
@Muchaszewski, the runtime stack usage limit is specified in bytes. A value of 50 actually selects an internal minimum, which is currently 16 KiB, and while that may be enough to run simple scripts, it's not surprising that you can easily overflow it by calling into the host and back out to script code.
Consider increasing that limit, or not specifying one at all. A higher limit will let you reign in runaway scripts without having to deal with the overhead of external script objects.
from clearscript.
Ok. I will close this ticket as the issue with inconsistency is solved.
As mentioned above would be nice to have documentation on that behavior that multiple V8ScriptEngine "talking" to each other may cause an error, this is not so obvious as my example has shown :)
from clearscript.
Related Issues (20)
- How to use ClearScript in VC++ project? HOT 2
- The VBS script passes hexadecimal 0 to the backend and prompts "Invalid parameter," while the JS script does not encounter this issue. HOT 3
- fetch - How should JSON objects be passed into JavaScript HOT 2
- Whether ClearScript acts as a parser. HOT 2
- How to use Task and Task.Run in VBScript? HOT 3
- microsoft.clearscript.v8 in use promise but return this {[undefined]} or {Microsoft.ClearScript.V8.V8ScriptItem.V8ScriptObject} HOT 3
- How to use Linq in microsoft.clearscript.v8 HOT 5
- How to use Linq in jsondata in microsoft.clearscript.v8 HOT 4
- Extension method for primitives types HOT 4
- Question about property object assignment HOT 5
- async Task HOT 2
- Need Strategies to Prevent ClearScript V8 Crashes Due to Large Memory Allocation in Scripts HOT 1
- Unable to initalize script engine due to pending script exception HOT 2
- I can't add memory.dll to visual studio 2019?
- Streams API? HOT 1
- ClearScriptV8.linux-x64.so not found in the Docker HOT 2
- ClearScriptV8.win-x86.dll and ClearScriptV8.win-x64.dll missing on Publish HOT 2
- Question: ScriptEngine.HostData HOT 4
- Question: try pattern from script HOT 2
- Behavior of the `MaxRuntimeHeapSize` property of `V8ScriptEngine` class has changed HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clearscript.