【发布时间】:2016-03-21 08:56:39
【问题描述】:
我正在尝试将 JS 算法移植到 C++,看看是否可以提高性能,但我在填充 v8 数组时面临巨大的性能瓶颈。
这是一个仅复制填充数组的 sn-p。我创建了一个包含 800k 个项目的数组,每个项目都是一个包含 17 个数字的数组。这个算法在我的机器上执行需要 3 秒,这是相当大的。
有没有办法加快速度?
#include <node.h>
namespace demo {
using namespace v8; // just for lisibility of the example
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
Local<Array> array = Array::New(isolate, 800000);
for (int i = 0; i < 800000; ++i) {
Local<Array> line = Array::New(isolate, 17);
for (int j = 0; j < 17; ++j) {
line->Set(j, Number::New(isolate, i * 100 + j));
}
array->Set(i, line);
}
args.GetReturnValue().Set(array);
}
void Init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(parser, Init)
}
【问题讨论】:
-
您是否将其与在 javascript 中创建相同的数组进行了比较?目前在 javascript 中创建一些东西并将它们传递给 C++ 会更快。
-
确实如此,但真正的算法实际上是大数据的 CSV 解析器,因此在启动算法时数组长度是未知的。在这个示例中我实际上使用了一些快捷方式,因为实际上我无法将
array变量预分配给已知大小。
标签: c++ node.js v8 node.js-addon