Comparaison des performances de la boucle DataTable

Lequel des éléments suivants a les meilleures performances ?

J'ai vu la deuxième méthode implémentée en JavaScript avec d'énormes gains de performances, cependant, je n'ai pu mesurer aucun gain en C

请先 登录 后评论

1 réponses

Lasse Vågsæther Karlsen

Non, il ne peut pas le faire car il n'y a aucun moyen d'exprimer une valeur constante dans le temps.

Si le compilateur devait être capable de le faire, il faudrait que le code renvoyant la valeur garantisse que la valeur est constante et ne changera pas pendant la durée de la boucle.

Mais, dans ce cas, vous êtes libre d'ajouter de nouvelles lignes à la table de données dans le cadre de votre boucle, et c'est donc à vous de faire cette garantie, de la manière dont vous l'avez fait.

Donc, en bref, le compilateur ne fera pas cette optimisation si l'index final est autre chose qu'une variable.

Dans le cas d'une variable, où le compilateur peut simplement regarder le code de la boucle et voir que cette variable particulière n'est pas modifiée, il peut le faire et charger la valeur dans un registre avant de démarrer la boucle, mais toute performance le gain de cela serait probablement négligeable, à moins que le corps de votre boucle ne soit vide.

Conclusion : si vous savez, ou êtes prêt à accepter, que l'indice de fin de boucle est constant pendant toute la durée de la boucle, placez-le dans une variable.

Modifier : relisez votre message, et oui, vous constaterez peut-être également des gains de performances négligeables pour vos deux cas, car le JITter optimise le code. Le JITter peut optimiser votre lecture d'index final en un accès direct à la variable à l'intérieur de la table de données qui contient le nombre de lignes, et une lecture en mémoire n'est pas si chère de toute façon. Si, en revanche, la lecture de cette propriété était une opération très coûteuse, vous verriez une différence plus notable.

请先 登录 后评论
  • 20 abonnés
  • 0 favoris,433 Feuilleter
  • GateKiller posée à 2023-03-17 19:15