Méthode la plus rapide pour case est un tableau est vide dans vb.net
Je veux savoir le moyen le plus rapide pour vérifier si un tableau est vide dans vb.net. Le tableau est déjà initialisé, donc je ne peux pas utiliser toutes les vérifications qui regarder qui. C'est l'actuel code ci-dessous:
If Not (cubes(threadnumber)(i).objects.GetLength(0) = 0) Then
cubes(threadnumber)(i).objects = New Double() {}
ReDim cubes(threadnumber)(i).objects(-1)
End If
J'ai fait quelques tests et je sais que l'aide '.getupperbound' est un peu plus rapide, mais je ne suis pas sûr si cela va fonctionner, parce que je pense".getupperbound' retourne la valeur 0 si la longueur du tableau est 1.
Tout/toutes les méthodes pour accélérer les choses (même très légèrement) seront extrêmement utiles. Ce programme prend une éternité à compleate et la première ligne du code ci-dessus est une grande partie du temps, il est demandé de 136 millions de fois.
Aussi si quelqu'un sait comment faire pour accélérer la "prochaine" boucles que j'avais de trop grand!
Merci 🙂
Fraser
merci pour la réponse (même si 2 ans après j'ai posé la question!) :). J'ai lu beaucoup de choses sur l'optimisation depuis ce post, mais spécifiquement à la recherche à la question de savoir si un tableau est vide a fini par être trop lent pour mon vaste tableau de tableaux.
Il n'est jamais trop tard! Ok, je devrais peut-être examiner la question et de répondre à des dates; mais ce n'en circulation partielle des questions. La solution que vous est venu avec allait être ma première réponse, plus ou moins. Fondamentalement, lorsque l'accès à un des objets de la propriété est trop cher, la piste elle-même d'une manière plus simple, plus rapide type. Des acclamations.
OriginalL'auteur FraserOfSmeg | 2012-11-22
Vous devez vous connecter pour publier un commentaire.
Length
est environ 2x plus rapide queGetLength
sur mon système (appelLength
136M prend parfois 0.650 secondes, tout en appelantGetLength (0)
prend 1.480 secondes).Aussi je ne comprends pas pourquoi vous ReDim votre tableau, vous avez déjà créé un nouveau.
Je crois que ça va être le plus rapide de code si des cubes est un tableau multidimensionnel:
Si les cubes n'est pas un tableau multidimensionnel (comme la Liste par exemple), vous devriez prendre le
cubes(threadnumber)
code de la boucle.Mise à jour
Length
est 6x plus rapide queGetLength
lors de l'exécution en mode Release, sans le débogueur, auquel casLength
prend de 0,181 s etGetLength
1.175 s sur mon système. C'est probablement parce que l'équipe inline l'appel àLength
, mais pas l'appel àGetLength
.Cette est le code de test que j'ai utilisé.
OriginalL'auteur Rolf Bjarne Kvinge
ou
Merci pour la réponse, oui, mais le principal problème, c'est que partout où vous suggérons de vérifier si cela n'a pas été initialisé, plutôt que d'être vide. Merci pour essayer de bien 🙂
Ma compréhension est que si il n'a pas été initialisée, il est équivalent à VB.NET "rien". Mais pour être honnête, je ne suis pas sûr exactement ce que vous essayez d'accomplir.
C'est ma compréhension - non initialisé = rien. Parce que je l'ai ai eu le code de tous les tableaux sont initialisés, mais seulement certains d'entre eux ont une longueur > 0.
Ah, je comprends maintenant. Je vais shutup et de laisser les gens qui savent de quoi ils parlent (comme Derek) fournir des informations utiles.
OriginalL'auteur sj1900
GetLength est le moyen le plus rapide que je connaisse pour voir si un tableau a des éléments qui le composent. Je ne pense pas que cela vous permettra d'accélérer ce morceau de code.
Toutefois, le code qui est à l'appel de cette 136 millions de fois pourrait probablement être optimisé.
Regardant votre code:
Je suppose que la raison pour laquelle vous êtes essais si elle a des éléments de sorte que vous pouvez redimensionner le tableau pour la libérer de la mémoire. Une meilleure façon de libérer de la mémoire peut-être pour effacer les cubes objet à sa place, et permettre à la tableaux de tomber hors de portée.
OriginalL'auteur Derek Tomes
Après quelques tests intensifs et l'analyse que j'ai trouvé ce qui semble être la méthode la plus rapide (au moins jusqu'à maintenant). Ce qui rend cette petite modification a accéléré mon programme de 500 à 600%.
Quand il y a un élément ajouté à l'objet des tableaux j'ai aussi ajouter l'index de la deuxième dimension des cubes pour une liste SI l'index de la deuxième dimension n'est pas déjà dans la liste. Toute autre suggèrent serait la bienvenue.
OriginalL'auteur FraserOfSmeg