gpt4 book ai didi

performance - GWT 中大型数值数组的有效表示

转载 作者:行者123 更新时间:2023-12-04 07:06:29 27 4
gpt4 key购买 nike

我有一个时间序列类,在一天的过程中将保存 100K-200K 值(基本上是市场报价,统一采样)。在 Java 方面,性能最好的表示是使用 double[](而不是 List)。我怀疑这种方法是否能很好地映射到 javasctipt。

在 Java 方面,double[] 数组必须定期增长(即分配一个新数组并将旧数组复制到新数组中)。例如,该类有一个方法,如:

public void add (long time, double price)
{
...
if (_len == _prices.length)
expand ();

_prices[_len++] = price;
...
}

private void expand ()
{
final double[] newprices = new double [_prices.length + 1024];
System.arraycopy (_prices, 0, newprices, 0, _len);
_prices = newprices;
}

现在 javascript 有一个不同的数组模型,并允许通过索引超出最后一个索引进行增量扩展,隐式调整分配。

GWT 有一个 JsArrayNumeric,它允许人们查看和操作 JS 数值数组。虽然 JsArrayNative 是来自 JS 的返回签名,但无法实例化(是的,可以在 JS 端有条件地使用 JSNI,但很难看)。

问题是,在 GWT 中,我可以在 java 类中使用哪些数据结构来获得到 JS 表示的最佳映射?我正在寻找最高效的方法:
  • 为时间序列添加价格(增加时间序列)
  • 访问时间序列(通常会通过索引扫描其中的一部分)/li>

  • 例如,ArrayList 是否映射到 javascript 中的某些内容?这可能比使用原始 double[] 有更好的映射。

    最佳答案

    JSArrayNumber将为您提供最有效的映射。 ArrayList 将为您装箱值,这意味着每个值都有一个对象包装器。甚至 double[] 也会遵守 Java 初始值语义(确保每个元素都初始化为 0.0)。 JSArrayNumber 将直接映射到保存原始数字的 JavaScript 数组。

    这里有一些陷阱,因为 JavaScript 数组可以为未初始化的索引返回 undefined 并且分配给索引实际上可以改变长度。您将不得不考虑这些。我通常创建 JsArrayNumber 的子类并使用断言来验证使用。

    此外,您不必使用 JSNI 来实例化 JsArrayNumber:

    JSArrayNumber a = JavaSriptObject.createArray().cast();

    关于performance - GWT 中大型数值数组的有效表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053256/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com