En mi aplicación de C#, me gustaría saber si es realmente importante usar la abreviatura para números más pequeños, int para más grande, etc. ¿El consumo de memoria realmente importa?¿Realmente importa distinguir entre corto, int, largo?
Respuesta
A menos que empaque grandes cantidades de estos en algún tipo de estructura, probablemente no afecte el consumo de memoria. La mejor razón para usar un tipo de entero particular es la compatibilidad con una API. Aparte de eso, solo asegúrese de que el tipo que elija tenga suficiente alcance para cubrir los valores que necesita. Más allá de eso para variables locales simples, no importa mucho.
Todo depende de cómo los esté usando y cuántos tenga. Incluso si solo tiene unos pocos en la memoria a la vez, esto podría impulsar el tipo de datos en su backing store.
Esto es totalmente relativo a la cantidad de memoria que puede permitirse perder. Si no estás seguro, probablemente no importe.
Solo usted puede juzgar si el consumo de memoria realmente importa . En la mayoría de las situaciones, no hará ninguna diferencia discernible.
En general, recomendaría usar int
/Int32
donde puede salirse con la suya. Si realmente necesita para usar short
, long
, byte
, uint
etc. en una situación particular, hágalo.
Para las aplicaciones de C# que no intentan copiar un tipo de estructura de un archivo, es mejor utilizar ints o cualquiera que sea su formato nativo. La única otra vez que podría importar es si se usan matrices en el orden de millones de entradas. Incluso entonces, aún consideraría los Ints.
La respuesta simple es que no es realmente importante.
La respuesta más compleja es que depende.
Obviamente, debe elegir un tipo que mantenga su estructura de datos sin desbordamiento, e incluso si solo está almacenando números más pequeños, entonces elegir int
es probablemente lo más sensato.
Sin embargo, si su aplicación carga una gran cantidad de datos o se ejecuta en un dispositivo con memoria limitada, entonces es posible que tenga que elegir short
para algunos valores.
El consumo de memoria basado en el tipo de enteros que está almacenando probablemente no sea un problema en una aplicación de escritorio o web. En un juego o aplicación de dispositivo móvil, puede ser más un problema.
Sin embargo, la verdadera razón para diferenciar entre los tipos es el tipo de números que necesita almacenar. Si tiene números realmente grandes, o de alta precisión, puede necesitar usar long
para almacenarlo.
La respuesta es: depende. La cuestión de si la memoria importa es totalmente de usted. Si está escribiendo una pequeña aplicación que tiene requisitos mínimos de almacenamiento y memoria, entonces no. Si eres de Google, almacena miles de millones de registros en miles de servidores, entonces cada byte puede costar un poco de dinero real.
Hay algunos casos en los que realmente me molesto en elegir.
- Cuando tengo limitaciones de memoria
- Cuando hago operaciones BitShift
- Cuando me importa acerca de la portabilidad x86/x64
todos los demás casos es int todo el camino
Edición: Acerca de x86/x64
En la arquitectura x86, un int es de 32 bits, pero en x64, un int es de 64 bits
Si escribe "int" en todas partes y se mueve de una arquitectura a otra, podría ocasionar problemas. Por ejemplo, tiene una API de 32 bits que exporta una larga. Lo conviertes en un número entero y todo está bien. Pero cuando pasas a x64, el infierno se desata.
El int se define por su arquitectura de modo que cuando cambie la arquitectura que tienen que ser conscientes de que podría dar lugar a problemas potenciales
No entiendo "Cuando me importa acerca de la portabilidad x86/x64". ¿Puede explicar esto? –
no sé sobre C#, pero en C un 'int' es de 32 bits en amd64 y x86. Es el "largo" que cambia de tamaño. El –
x 86 x 64 vs argumento es erróneo en C# - 'int' es un alias de' System.Int32' (ver [MSDN] (http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx)) Si quieres el tamaño nativo de la plataforma, entonces creo que debes usar IntPtr. – Samuel
El contexto de la situación es muy importante aquí. Sin embargo, no es necesario que adivine si es importante o no, estamos lidiando con cosas cuantificables aquí. Sabemos que estamos guardando 2 bytes usando un short en lugar de un int.
¿Qué se estima el mayor número de casos van a estar en la memoria en un punto dado en el tiempo? Si hay un millón, estás ahorrando ~ 2Mb de Ram. ¿Es eso una gran cantidad de ram? De nuevo, depende del contexto, si la aplicación se ejecuta en un escritorio con 4 Gb de memoria RAM, probablemente no te preocupes demasiado por los 2Mb.
Si habrá cientos de millones de instancias en la memoria, los ahorros van a ser bastante grandes, pero si ese es el caso, es posible que no tenga suficiente memoria RAM para manejarlo y es posible que tenga que almacenar esta estructura en disco y trabajar con partes de él a la vez.
Int32
estará bien para casi cualquier cosa. Las excepciones incluyen:
- si tiene necesidades específicas donde un tipo diferente es claramente mejor. Ejemplo: si usted está escribiendo un emulador de 16 bits,
Int16
(aka:short
) probablemente sería mejor para representar algunas de las partes internas - cuando una API requiere un cierto tipo
- una vez, tuve un inválido
int
fundido y la primera sugerencia de Visual Studio fue verificar que mi valor fuera menor que el infinito. No pude encontrar un buen tipo para eso sin usar las constantes predefinidas, así que uséulong
ya que era lo más cercano que podía entrar en .NET 2.0 :)
- 1. IDisposable, ¿realmente importa
- 2. "int" realmente debe ser al menos tan grande como "corto" en C?
- 3. Añadiendo int al corto
- 4. largo largo vs int multiplicación
- 5. GET vs. POST ¿realmente importa?
- 6. Sobrecarga con Corto e int
- 7. Apache .htaccess vs httpd - ¿realmente importa?
- 8. en Scala, largo, int, etc.
- 9. C++ int frente a largo
- 10. velocidad de iteración de int vs largo
- 11. C#, ¿Escribir método más largo o método más corto?
- 12. formato Windows camino corto a formato largo camino
- 13. ¿Por qué falla este reparto de corto a int?
- 14. ¿Por qué realmente corto tiempo de espera en ASP.NET MVC?
- 15. Git: distinguir entre etiquetas locales y remotas
- 16. ¿Cómo puedo distinguir entre gráficos y fotografías?
- 17. iPhone ASIHTTP - ¿Distinguir entre llamadas API?
- 18. ¿Puedo usar UIPinchGestureRecognizers para distinguir entre pellizcos horizontales y verticales?
- 19. ninguna advertencia sobre la cesión de int a corto (gcc)
- 20. ¿Unario menos en un corto se convierte en int?
- 21. Cómo escribir un literal int corto sin signo?
- 22. No se puede convertir implícitamente el tipo 'int' a 'corto'
- 23. ¿Cómo distinguir entre bind() en sys/sockets.h y std :: bind?
- 24. ¿Cuál es la diferencia entre 'int'? y 'int' en C#?
- 25. ¿Hay alguna diferencia entre int & a y int & a?
- 26. ¿Google Gears realmente es una solución a largo plazo?
- 27. Cuál es la diferencia entre el argumento "int" y "largo" en onItemClick en Android
- 28. ¿Cuál es la diferencia entre el tiempo largo y long int
- 29. ¿Diferencia entre void main e int main?
- 30. ¿Qué significa realmente el número entre paréntesis?
Las personas estúpidas no entienden ... [StructLayout (LayoutKind.Sequential, Paquete = 1)] usted puede hacer que la clase base y definir el campo como sea necesario en derivados. – nim