SoCaseInsensitive a-t-il un impact important sur les performances d'un TdxMemIndex sur un TdxMemDataset?

StackOverflow https://stackoverflow.com/questions/651264

Question

J'ajoute quelques index à mon TdxMemDataset de DevExpress pour améliorer les performances. Le TdxMemIndex contient SortOptions , qui inclut l'option pour soCaseInsensitive . Mes données sont généralement des chaînes GUID, elles ne sont donc pas sensibles à la casse. Je me demande si je ne ferais pas mieux de forcer toutes les données au même cas ou si l'indicateur soCaseInsensitive et l'utilisation de l'indicateur loCaseInsensitive avec l'appel à Locate ont une valeur mineure. pénalité de performance (à peu près égale à la conversion de la casse de ma chaîne chaque fois que je dois utiliser l'index).

À ce stade, je laisse le CaseInsentive hors tension et ne convertis que le cas.

Était-ce utile?

La solution

IMHO, Le mieux est d’assurer la qualité des données au moment de la publication. Raisonnements:

  1. Vous connaissez (généralement) la nature des données. Donc, par exemple. vous pouvez utiliser UpperCase (sachant que tous les GUID sont dans la plage ASCII) au lieu de beaucoup AnsiUpperCase plus lent qu'un composant général tel que TdxMemDataSet est forcé d'utiliser.

  2. Vous entrez les données une seule fois. Rechercher / Trier / Filtrer, ce qui implique le moteur de montée de classe interne de TdxMemDataSet, c’est une action répétée. De plus, il y a d'autres actions chaînées qui vont déclencher ce moteur sans se réaliser. (Par exemple, un TcxGrid trié par défaut ayant GridMode: = True (je suppose que vous utilisez les composants DevEx.) Et une classe agissant comme un courtier transmettant le message de tri au jeu de données sous-jacent.

  3. Habituellement, la saisie des données est effectuée par étapes, un ou plusieurs enregistrements dans un lot. Les applications d'acquisition de données constituent la seule exception notable. Mais dans les deux cas, la culture de convivialité de l’utilisateur vous permet de jouer avec des temps de réponse plus longs. (IOW combien ajouterait un appel UpperCase à une publication enregistrée qui dure 0,005 ms?) OTOH, les utilisateurs sont très exigeants en raison de la rapidité des opérations de récupération de données (recherche, tri, filtrage, etc.). Gardez la récupération de données aussi vite que possible.

  4. Le fait de disposer des données de la base de données prêtes à être exposées réduit le risque d'erreur de traitement lorsque vous écrivez ( si vous écrivez) d'autres modules (vous devez vous rappeler dans AnsiUpperCase le données dans n’importe quel module dans la langue que vous écrivez). Ici aussi, un exemple classique est celui où vous utiliserez d’autres outils externes pour accéder aux données (par exemple, les gestionnaires de base de données pour exécuter un SQL SELCT sur les données).

hth.

Autres conseils

Peut-être que les forums DevExpress (ou un courrier électronique d'assistance si vous y avez accès) seraient un meilleur endroit pour rechercher une réponse faisant autorité sur cette question de performance.

Quoi qu’il en soit, il est préférable de garantir que les données se trouvent au format souhaité - pour les raisons déjà expliquées - au moment où vous les enregistrez. Donc, dans ce cas particulier, assurez-vous que le GUID est écrit en majuscule (ou inférieur, c'est une affaire de goût). Si c'est SQL Server ou un autre serveur de base de données qui possède un type de données GUID, assurez-vous que SELECT effectue le travail - si s'applique et possible , même le tri.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top