问题标签 [v8.net]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
613 浏览

c# - v8dotnet -- 无法加载 v8.net.proxy.interface

我正在尝试编写一个 hello world 程序,该程序使用 v8dotnet 将一些基本的 js 打印到控制台。

我有一个简单的应用程序

但这似乎不起作用

附加信息:无法加载文件或程序集“V8.Net.Proxy.Interface,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。操作在当前状态下是不合法的。(来自 HRESULT 的异常:0x80131509)

我已将二进制文件附带的所有 dll 放在我的 bin/debug 文件夹中,并添加了参考 V8.NET dll(如所描述的文档)。我尝试了设置 x86 或 x64 并将 dotnet 版本设置为 4.0 的多种组合。

我确保我安装了 Visual c++ 2012 再分发版。无论我尝试什么,我似乎都无法让它发挥作用。有什么帮助吗?

0 投票
1 回答
1084 浏览

c# - V8.NET (v8dotnet) 单声道

希望有人有一点时间来解释如何将 V8.Net 与 Mono 一起使用。我正在尝试在我的 ubuntu 机器上使用 V8.Net 和 mono 3.10。到目前为止,我做了以下事情:

  1. 使用 codeplex 上的内容创建示例项目

    /li>
  2. 将 V8.Net.dll 和 V8.NetSharedTypes 添加到引用中

  3. 我将文件夹 /Release/NET 4.0/x64 的内容复制到我的构建目录的 /bin/Debug/x64

  4. 当我尝试运行该示例时,我收到以下错误:抛出了一个 system.DllNotFoundException。

  5. 我将 Build 类型从 Debug 更改为( Debug | Any cpu )。如果我理解正确,那么库现在应该选择正确的 dll。

6 当我以这种模式重新运行程序时。程序停在:加载的程序集:/Build/v8dotnet/testv8/testv8/bin/test/x64/V8.Net.Proxy.Interface.x64.dll [外部]

调用堆栈显示:V8.Net.V8NetProxy.CreatehandleProxyTest()。

希望您能给我一些意见以使其运行。

0 投票
2 回答
30 浏览

git - 构建 3rd 方工具时的 V8.NET 问题

我正在尝试安装 V8.NET https://v8dotnet.codeplex.com/

它提供了一个下载 V8 和一些 3rd 方工具(gyp,...)的程序。

先决条件是安装 git 和 subversion,并添加到路径中。我都做过。

尝试下载 3rd 方工具时,我得到

我想我没有安装或添加此程序或批处理文件到 PATH,但我无法确定哪个程序是“构建”的,因为我无法在任何地方找到它。

0 投票
1 回答
354 浏览

c# - 如何正确处置和释放用于 V8.Net.V8Engine 实例的内存?

我在使用我的 V8Engine 实例时遇到了一个问题,它似乎有一个小的内存泄漏,并且处理它,以及强制垃圾收集似乎没有多大帮助。它最终会在V8Enging local_m_negine = new V8Engine()声明一个Fatal error in heap setup, Allocation failed - process out of memoryAttempted to read or write protected memory. This is often an indication that other memory is corrupt.

在运行时通过任务管理器监控程序的内存使用情况确认它正在泄漏内存,我认为每两秒钟大约 1000 KB。我怀疑是在执行的脚本中声明的变量没有被收集,或者与该GlobalObject.SetProperty方法有关。调用V8Engine.ForceV8GarbageCollection(),V8Engine.Dispose()甚至GC.WaitForPendingFinalizers()&GC.Collect()并不能防止内存泄漏(尽管值得注意的是,使用这些命令似乎泄漏它的速度较慢,而且我知道我不应该使用 GC,但它是最后的手段看看能不能解决问题。)

一个可以提供解决方案的切线问题是无法清除 V8Engine 的执行上下文。我需要为每个脚本处理和重新实例化引擎,我认为这是发生内存泄漏的地方,否则我会遇到已经声明变量的问题,从而导致V8Engine.Execute()抛出这样的异常。

我可以肯定地确认内存泄漏与 V8Engine 实现有关,因为运行使用 Microsoft.JScript 的该程序的旧版本没有这种内存泄漏,并且使用的内存保持一致。

受影响的代码如下;

编辑:

不确定这会有多大用处,但我一直在上面运行一些内存分析工具,并且了解到在运行原始代码的隔离版本后,我的软件最终会出现大量 IndexedObjectList 的实例,其中充满了空值(见这里:http: //imgur.com/a/bll5K)。对于每个生成的 V8Engine 实例,似乎每个类都有一个实例,但它们没有被释放或释放。我不禁觉得我在这里缺少命令或其他东西。我用来测试和重新创建上述实现导致的内存泄漏的代码如下: