2011-04-27 8 views
8

Dans pré-Visual Basic Visual Basic, un programmeur pouvait déclarer une chaîne à une certaine largeur. Par exemple, je sais qu'un numéro de sécurité sociale (aux États-Unis) comporte toujours onze caractères. Donc, je peux déclarer une chaîne qui stockerait les numéros de sécurité sociale comme une chaîne de onze caractères comme ceci:VB6 - L'utilisation de chaînes à largeur fixe dans VB6 présente-t-elle des avantages en termes de performances?

Dim SSN As String * 11 

Ma question est la suivante: cela crée tout type de prestation de performance qui soit faire fonctionner le code plus rapide ou peut-être utiliser moins de mémoire? De même, une chaîne de longueur fixe serait-elle affectée différemment en mémoire (, c'est-à-dire: sur la pile plutôt que dans le tas)?

+1

Utilisez cette fonctionnalité pour la validation des données, pas pour l'optimisation des performances. – JohnFx

+2

J'ai décidé de faire un benchmarking. J'ai découvert que l'utilisation de chaînes à largeur fixe dans mon code conduisait à une baisse ** de la performance de quinze pour cent **, c'est-à-dire qu'il fallait quinze pour cent de plus pour exécuter en moyenne. Je ne pouvais toujours pas trouver un moyen de déterminer si la variable est allouée sur la pile ou le tas, et je ne connais pas un moyen dans VB6. En ce qui concerne la validation des données, cela semble être une mauvaise façon de valider. Je peux peut-être comprendre pourquoi cette fonctionnalité a été supprimée de VB.NET. –

+0

Bonne question; super commentaire, Daniel! – CaBieberach

Répondre

4

Le temps que dans VB6 ou plus tôt que je devais utiliser chaînes de longueur fixe était de travailler avec des appels API. Ne pas passer une chaîne de longueur fixe provoquerait des erreurs inexpliquées à des moments où la longueur était plus longue que prévu, et même parfois plus courte que prévu. Si vous envisagez et modifiez cela dans l'application, assurez-vous que les chaînes ne sont pas transmises à une API ou à une DLL externe et que le programme n'exige pas la génération de champs de longueur fixe, par exemple avec de nombreux programmes d'importation AS/400.

Personnellement, je n'ai jamais pu voir une différence de performance car je courais des boucles de 300k + enregistrements, mais n'avait pas d'autre choix que de fournir et de travailler avec des longueurs fixes quand je l'ai fait. Cependant VB aime utiliser des longueurs indéfinies par défaut donc j'imagine que les performances seraient plus faibles pour une longueur fixe. Essayez d'écrire une application de test pour effectuer une concaténation de base de deux chaînes et faites-la boucler sur la fonction comme 50k fois. Time la différence entre les deux d'avoir une longueur indéfinie et l'autre fixe.

+0

Une autre raison pour laquelle des chaînes de longueur fixe ont été utilisées est la lecture et l'écriture d'enregistrements de longueur fixe dans un fichier. par exemple. Un tableau de types. –

5

Mise à jour:

Non, il n'y a aucun avantage de performance; MAIS même s'il y avait un avantage de performance c'est une micro-optimisation (sauf si vous appelez beaucoup (disons millions) fois dans une boucle.)

Aussi, les chaînes de longueur fixe occupent généralement plus de mémoire que celles de longueur variable si vous n'utilisez pas toute la longueur (à moins de très courtes chaînes de longueur fixe).

Comme toujours, vous devriez soigneusement comparer les performances avant de rendre le code plus difficile à maintenir.

chaînes de longueur fixe ont été généralement considérés lors de l'interaction avec certains API COM, ou lors de la modélisation des contraintes de domaine (comme l'exemple que vous avez donné un NSS)