Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在as3中获取对象值的最快方法_Apache Flex_Actionscript 3_Optimization_Object_Arraycollection - Fatal编程技术网

Apache flex 在as3中获取对象值的最快方法

Apache flex 在as3中获取对象值的最快方法,apache-flex,actionscript-3,optimization,object,arraycollection,Apache Flex,Actionscript 3,Optimization,Object,Arraycollection,好吧,我发誓这个问题应该到处都是,但不是 我有一个value对象,里面有很多getter/setter。它不是一个动态类。我迫切需要搜索一个装满它们的数组集合。搜索范围涵盖所有领域,因此我将使用大约13种不同类型的VO进行搜索 我试过ObjectUtil.toString(),它工作得很好,但速度非常慢。要返回的属性有20个,ObjectUtil.toString()会向输出中添加一堆垃圾,更不用说代码开始时很慢 flash.utils.describeType()更糟糕 我很高兴听到我遗漏了一

好吧,我发誓这个问题应该到处都是,但不是

我有一个value对象,里面有很多getter/setter。它不是一个动态类。我迫切需要搜索一个装满它们的数组集合。搜索范围涵盖所有领域,因此我将使用大约13种不同类型的VO进行搜索

我试过ObjectUtil.toString(),它工作得很好,但速度非常慢。要返回的属性有20个,ObjectUtil.toString()会向输出中添加一堆垃圾,更不用说代码开始时很慢

flash.utils.describeType()更糟糕

我很高兴听到我遗漏了一些明显的东西

更新:
最后,我使用Juan的代码和用于搜索的过滤算法创建了ArrayCollectionX。这意味着我现在使用的每个ArrayCollection都处理自己的过滤器。我可以搜索AC中物品的各个属性,或者使用Juan的代码,它可以像champ一样处理完整的集合搜索。与使用外部过滤器的相同解决方案相比,延迟可以忽略不计。

如果我正确理解了您的问题,您需要的是为某些对象定义的getter列表。据我所知,您必须为类似的内容使用describeType(我非常确定ObjectUtils在幕后使用此方法)

正如您所注意到的,大量调用DescripteType将会很慢。但我认为,对于13种类型来说,这应该不会有问题。因为这些类型不是动态的,所以您知道它们的属性是固定的,所以您可以检索此数据一次并缓存它。您可以提前构建缓存,也可以在发现新类型时构建缓存

下面是在代码中执行此操作的简单方法:

private var typePropertiesCache:Object = {};

private function getPropertyNames(instance:Object):Array {
    var className:String = getQualifiedClassName(instance);
    if(typePropertiesCache[className]) {
        return typePropertiesCache[className];
    }
    var typeDef:XML = describeType(instance);
    var props:Array = [];
    for each(var prop:XML in typeDef.accessor.(@access == "readwrite" || @access == "readonly")) {
        props.push(prop.@name);
    }   
    return typePropertiesCache[className] = props;
}

太棒了!非常感谢。