with natural language jurafsky and .net arrays list

.net - natural - Comparando la lista genérica con una matriz



natural language processing with python (2)

¿Por qué generic.list es más lento que array?


En términos de rendimiento de lectura, hay dos factores:

  • una desreferencia adicional (es decir, la List<T> contendrá un campo T[] y tendrá que desviarla)
  • no puede usar algunas optimizaciones del compilador que existen para T[] , como eliminar la comprobación de límites durante los ciclos

Sin embargo, es mucho más fácil agregarlo a una List<T> , en particular porque conserva espacio libre, es decir, no tiene que redimensionar / ajustar toda la matriz para agregar un solo elemento.


Una lista genérica es un poco más lenta que una matriz, pero no lo hará en la mayoría de los casos. En su mayoría tiene que ver con que la búsqueda sea un poco más compleja: se dice que List usa una matriz "debajo del capó", pero no se garantiza que los nodos permanezcan en la memoria adyacente de la misma forma que en el conjunto.

Sin embargo, vi algunos puntos de referencia en el año 2005 (no puedo encontrar el enlace ahora) y la diferencia es muy pequeña.

Además, la lista tiene una serie de ventajas importantes sobre una matriz: principalmente que es trivial agregar o eliminar elementos. Es mucho más fácil utilizar una lista cuando no sabe cuántos elementos necesitará o cuando variará ese número. En esos casos (y honestamente, eso es la mayoría del tiempo ), probablemente no deberías usar una matriz.