¿Qué es mejor en C #, mantener una variable con un tamaño de matriz o llamar a la longitud de la matriz?

La respuesta corta es que es completamente irrelevante, solo use {array}.Length .

Pero mientras lo hacemos, decidí comprobar qué hace realmente el código …

Si soy sincero, no puedo leer exactamente el idioma intermedio, pero para las matrices nativas, recuperar la longitud a través de {array}.Length parece ser un puñado de instrucciones en el mejor de los casos, en particular ldlen , y probablemente 1–2 en cualquier dirección está configurando la operación correctamente.

De ninguna manera puedes superar eso con el conteo manual.

En cuanto a otras colecciones, la regla general es: si expone una propiedad llamada .Count o .Length , puede esperar razonablemente que sea O (1), por lo que no es necesario almacenarla. Si necesita llamar a una función llamada .Count() , probablemente iterará sobre la colección para contarla, lo que dará como resultado O (n). Si necesita el recuento repetidamente, puede ser una buena idea almacenarlo temporalmente (¡pero no lo haga un seguimiento por separado! Si lo necesita, está utilizando el tipo de colección incorrecto).

Ejemplos:

List tiene una propiedad .Count y probablemente realiza un seguimiento interno del recuento de elementos. O (1). No es necesario guardarlo usted mismo.

IEnumerable solo tiene un método .Count() . Si necesita usar repetidamente el recuento de elementos, calcule una vez y recuérdelo hasta que termine de usarlo.

Resumen: solo use {array}.Length . No importará

No es costoso en C #. Por un lado, no hay “cálculo”: consultar la longitud es básicamente una operación elemental gracias a la alineación. Y en segundo lugar, porque (según sus desarrolladores), el compilador reconoce este patrón de acceso y, de hecho, optimizará cualquier verificación de límites (redundante) para el acceso a los elementos de la matriz.

Y, por cierto, creo que algo similar es cierto para las máquinas virtuales JavaScript modernas, y si aún no lo es, será muy pronto ya que esta es una optimización trivial.

¿Es costoso hacer array.length o list.count en un bucle?

Entonces, llame a la longitud de la matriz.