我有一些我想要优化的工作代码,它使用Windows.Data.Json JsonArray对象:
// This works but could be improved?
JsonArray inputArray;
...
// Filter the array
JsonArray filteredObjs = new JsonArray();
foreach (IJsonValue jsonValue in inputArray)
{
JsonObject obj = jsonValue.GetObject();
if (SomeFilterOperation(obj))
filteredObjs.Add(entityObj); // Amortized O(1)
}
return filteredObjs;
在我的代码中,“添加”功能运行超过10,000次 - 不一定都在同一范围内,但它仍会导致一些长数组。所以这是优化的候选者。
添加是分摊的O(1),但是当超出容量时避免内部数组调整大小操作会很好。由于我知道filteredObjs
的最大大小为inputArray.Count
,因此我尝试制作一个具有指定容量的列表,因此无需调整大小:
var filteredObjs = new List<IJsonValue>(inputArray.Count);
foreach (IJsonValue jsonValue in inputArray)
{
JsonObject obj = jsonValue.GetObject();
if (SomeFilterOperation(obj))
filteredObjs.Add(obj); // will never cause a resize, is thus O(1) always
}
return /* how to turn this List<IJsonValue> into a JsonArray? */
...但是JsonArray
没有任何接受List<IJsonValue>
的构造函数,这令人沮丧,因为这就是JsonArray
。
主要问题:
有没有办法将List<IJsonValue>
转换为JsonArray
或以避免调整大小的方式构建JsonArray
?