type tipo net long data vb.net performance integer short processing-efficiency

vb.net - tipo - vb net long integer



Código eficiente: tipos de datos cortos versus enteros en VB.Net (2)

Como regla general, cuanta menos memoria use una variable, más rápido se procesará y tendrá una mejor administración de memoria porque su aplicación usará menos cantidad de memoria.

Short solo necesita la mitad de las necesidades de enteros de la memoria, si solo necesita un número de 16 bits y está seguro de que nunca será más grande, use Short.

Estoy escribiendo una aplicación donde el rendimiento es bastante crítico. Estoy un poco confundido sobre cuál es el tipo de datos más eficiente para las CPU x64.

MDSN dice que "en algunos casos, el tiempo de ejecución de lenguaje común puede empaquetar sus variables cortas muy juntas y ahorrar el consumo de memoria". sino también que "El tipo de datos Integer proporciona un rendimiento óptimo en un procesador de 32 bits"

Estoy usando una gran cantidad de datos (promedio de alrededor de 5 millones de valores en una matriz dentada [10 o más] [30] [128,128]) para generar mapas de bits en tiempo real (mapas de calor de los valores de los datos). Todos los puntos de datos son números enteros entre 200 y 3500, así que puedo usar números cortos o enteros. ¿Cuál sería más eficiente?

Gracias.


El tipo Int32 es más eficiente para variables regulares, por ejemplo, contadores de bucle, tanto en aplicaciones de 32 bits como de 64 bits.

Cuando maneja grandes conjuntos de datos, la eficiencia de leer / escribir un solo valor no importa demasiado, lo que importa es acceder a los datos para que pueda obtener la menor memoria posible. Una falta de memoria caché es muy costosa en comparación con un acceso a la memoria en caché. (Además, un error de página (la memoria intercambiada en el disco) es muy costosa en comparación con una falta de memoria caché).

Para evitar fallas en la memoria caché, puede almacenar los datos lo más compactos posible, y cuando procesa los datos, puede acceder a ellos de la forma más lineal posible para que el área de memoria a la que acceda sea lo más pequeña posible.

Es más probable que el uso de Int16 sea ​​más eficiente que Int32 para cualquier matriz lo suficientemente grande como para abarcar múltiples bloques de caché, y un bloque de caché es generalmente de unos pocos kilobytes.

Como sus valores son posibles de almacenar en solo 12 bits, podría ser incluso más eficiente almacenar cada valor en 1.5 bytes, lo que significa más procesamiento para manejar los datos. La reducción del 25% del tamaño de los datos puede compensar con creces el procesamiento adicional.