Supposons que nous ayons un certain type d'objet personnalisé:algorithme efficace pour trouver des objets de valeur dans la collecte
class SomeObjectType {
public var intProperty1:int;
public var intProperty2:int;
public var intProperty3:int;
public var stringProperty1:String;
public var stringProperty2:String;
public var stringProperty3:String;
public var stringPropertyThatActuallyIsInt1:String;
public var stringPropertyThatActuallyIsInt2:String;
public var stringPropertyThatActuallyIsInt3:String;
...
%ABOUT_20_ANOTHER_PROPERTIES_THAT_I_WON'T_USE%
}
Nous avons une collection de plus de 20k instances de ces objets. Et nous avons juste 1 entrée de texte qui est en fait un filtre de recherche. L'utilisateur peut taper dans ce champ tout ce qu'il veut et si son filtre correspond à N'IMPORTE QUEL des 9 premiers champs que j'ai décrits avant, nous devrions laisser cet objet dans la collection. Juste le filtrage des éléments simples.
Et permettez-moi de décrire comment cela fonctionne dans notre projet maintenant. Cet algorithme convertit toutes ces propriétés en chaînes, les concatène et effectue une recherche en utilisant la méthode indexOf()! = -1. C'est vraiment lent. Il faut environ 500-900ms sur ma machine dev et environ 3-4s sur iPad à chaque changement de filtre. Statistiques horribles, n'est-ce pas?
Petite note: nous utilisons cet algorithme à différents endroits de l'application et les objets diffèrent de l'objet I décrit plus haut mais l'idée est la même. Je crois que c'est une bonne idée de comparer int à int, string à string (implémentant quelques algorithmes rapides (il y en a beaucoup)), et convertir une chaîne qui est réellement en int et les comparer en int à int, mais object diffère beaucoup donc j'ai besoin d'un algorithme commun.
Merci pour des conseils pour faire de la classe finale. Je vais essayer de l'utiliser demain. Vous avez raison à propos de ArrayCollection - nous les utilisons. Mais nous ne pouvons pas changer ArrayCollection en Vector, car Adobe ADEP l'utilise uniquement comme ArrayCollection. Je ne pense pas que la conversion de ArrayCollection à (nouveau!) Vector aidera avec la performance – shvetsroman
@murdoc Pourquoi? -> "Je ne pense pas que la conversion de ArrayCollection en (nouveau!) Vecteur aidera avec la performance". Vous pouvez faire une copie de votre collection dans un vecteur et lancer un test. –
Jetez également un oeil à la réponse ici: http://stackoverflow.com/questions/2672096/arraycollection-versus-vector-objects-in-flex –