C++ V8:尝试每秒调用函数60次时性能不佳

C++ V8:尝试每秒调用函数60次时性能不佳,c++,v8,C++,V8,我正在尝试将V8集成到我的游戏引擎中。这就是引擎当前处理脚本的方式:当游戏开始时,所有脚本都被加载、编译并运行。之后,脚本引擎尝试获取一个指向两个JS函数的指针,这两个函数分别是setup和update。如果函数存在于源代码中,那么它们的指针将放在两个持久对象中。然后发动机调用设置功能一次 在此之后,游戏循环开始,我的引擎尝试每秒调用update函数60次(计时由VSync处理,这就是为什么它是60次)。这是通过以下代码完成的: void ScriptComponent::Update() {

我正在尝试将V8集成到我的游戏引擎中。这就是引擎当前处理脚本的方式:当游戏开始时,所有脚本都被加载、编译并运行。之后,脚本引擎尝试获取一个指向两个JS函数的指针,这两个函数分别是
setup
update
。如果函数存在于源代码中,那么它们的指针将放在两个
持久对象中。然后发动机调用
设置
功能一次

在此之后,游戏循环开始,我的引擎尝试每秒调用
update
函数60次(计时由VSync处理,这就是为什么它是60次)。这是通过以下代码完成的:

void ScriptComponent::Update()
{
    if (!script_context->function_update.IsEmpty())
    {
        v8::Isolate* isolate = script_context->isolate;
        v8::Isolate::Scope isolate_scope(isolate);
        v8::HandleScope handle_scope(isolate);

        // script_context->context is a Persistent<Context> and
        // script_context->function_update is a Persistent<Function>
        v8::Local<v8::Context> context = script_context->context.Get(isolate);
        script_context->function_update.Get(isolate)->Call(context, context->Global(), 0, {});
    }
}
void ScriptComponent::Update()
{
如果(!script\u context->function\u update.IsEmpty())
{
v8::Isolate*Isolate=script\u context->Isolate;
v8::隔离::范围隔离\范围(隔离);
v8::手柄镜手柄镜(隔离);
//script\u context->context是一个持久的
//脚本\u上下文->函数\u更新是持久的
v8::Local context=script\u context->context.Get(隔离);
脚本上下文->函数更新.Get(隔离)->调用(上下文,上下文->全局(),0,{});
}
}
一切正常,但由于某些原因,它使CPU使用率高达约20%,fps降低到约30-45 fps,偶尔出现延迟峰值。但是如果我注释掉这段代码,我会得到平均1%的CPU使用率和稳定的60 FPS


有没有什么方法可以优化上面的代码,这样就不会花那么长的时间来执行?

如果有人在V8上出现性能问题,请确保您使用版本运行程序,并且不调试

是否运行优化的版本(不是“调试”或未优化的版本)?构建应用程序时使用的编译器标志是什么?所有这些信息都需要指定。谢谢,我是在调试中运行的,发行版看起来不错。我将把这一点写在答复中。这是一个掌心时刻……这几乎可以推广到任何C/C++程序;-)