¿Hay alguna manera de determinar cuánta memoria se utiliza para un objeto en particular? Por ejemplo, una lista. Teniendo todo en cuenta, como el interinato de cadenas y todo lo que hace el compilador/entorno de ejecución/lo que sea.C#: uso de la memoria de un objeto
Respuesta
Realmente tendría que definir exactamente lo que quiere decir con "cuánta memoria se utiliza para un objeto en particular". Por ejemplo, podría querer decir "si este objeto fuera basura recolectada, cuánto sería liberado", o podría significar "cuánta memoria ocupa este objeto y todo lo que toca".
Su punto sobre el interinato de cuerdas es un buen ejemplo. Supongamos que haces:
List<string> internedStrings = new List<string>();
List<string> nonInternedStrings = new List<string>();
for (int i=0; i < 1000; i++)
{
string tmp = new string(' ', i+1);
nonInternedStrings.Add(tmp);
tmp = tmp.Intern();
internedStrings.Add(tmp);
}
¿Se nonInternedStrings
realmente ocupan más memoria que internedStrings
? Si internedStrings
se recogieron basura, no liberaría tanta memoria, pero si internedStrings
nunca hubiera sido creado (incluida la no interna de cada uno de sus elementos), entonces nunca se habría requerido más memoria.
Si puede ser más específico acerca de exactamente lo que quiere decir, es posible que podamos ayudarle. Sin embargo, es un problema complejo.
, bueno, eso es exactamente lo que quería saber: p Si, cuando obtengo un montón de filas de la base de datos (donde muchas filas incluyen el mismo cadenas en algunas columnas), ¿debería trabajar para asegurarme de que están internados, o no debería molestarme con eso? – Svish
Haría lo más simple que funciona para empezar, y luego perfilaré tu aplicación para ver cuánta memoria usa. Sin embargo, no usaría String.Intern. He dejado una respuesta en tu otra pregunta para explicar por qué. –
lo comprobará, gracias =) – Svish
¿Has probado CLR Profiler 2.0?
No. ¿Debería quizás? prueba eso. Sin embargo, esperaba algo en el código. Así que podría ordenar Console.WriteLine (MemoryUsageOf (someObject)) o algo así: p – Svish
CLR Profiler le proporciona una gran cantidad de información a lo largo de la información de la memoria ... La mejor manera de escribir código es escribir ningún código;) –
Si funcionara ... Funcionando el programa funciona, el lanzamiento de mi programa funciona. Pero cuando salgo de mi programa, el CLR Profiler arroja una excepción: – Svish
Esto parece ser un hermano de este Delphi question. Un algoritmo ingenuo no tendrá en cuenta la diferencia entre la agregación y la composición. Incluso un algoritmo basado en la marca y el barrido no le dirá si una tabla hash tuvo que hacer crecer su matriz interna porque un objeto fue referenciado por ella. Probablemente sea mejor perfilar su aplicación para una variedad de escenarios y trazar el uso de recursos contra N, donde N es una medida de la escala de su conjunto de datos.
ANTS Memory Profiler perfila el consumo de memoria del código .NET. He tenido excelentes resultados con esto en el pasado.
- 1. Registrando el uso de la memoria de un objeto
- 2. memoria tomada de un objeto C#
- 3. pérdida de memoria Uso de JSON-C
- 4. Uso de la memoria de los iteradores en C#
- 5. ¿Cómo evitar quedarse sin memoria en la aplicación de uso de memoria alta? C/C++
- 6. Estructura de un objeto de C++ en la memoria Vs un Struct
- 7. Uso de C# para serializar un objeto deserializable de Java
- 8. ¿Uso de memoria de un proceso hijo?
- 9. C# Dictionary y uso eficiente de la memoria
- 10. XNA Content.Load() Uso de memoria
- 11. Volcado de los contenidos de la memoria de un objeto
- 12. Uso de la memoria de seguimiento de un método
- 13. Uso de la memoria de seguimiento de Xcode and Instruments
- 14. gdb interpretar la dirección de memoria como un objeto
- 15. Redis: uso de la memoria de supervisión
- 16. C++ Gestión de la memoria
- 17. Estructura de la memoria de un objeto que solo funciona?
- 18. Serializar un objeto de flujo de memoria en la cadena
- 19. C# ¿Cómo puedo fijar un objeto en la memoria sin ordenar el objeto?
- 20. ¿Podría un objeto desasignar su memoria?
- 21. Uso y clasificación de la memoria SAS
- 22. Uso de la memoria del diccionario Python
- 23. Uso de la memoria Java BigDecimal?
- 24. Cómo determinar la memoria de un objeto C++ en tiempo de ejecución
- 25. ¿Cómo perfil el uso de la memoria?
- 26. Cómo perfilar el uso de la memoria de un programa en C
- 27. Eliminar objeto de la memoria en javascript
- 28. uso de la memoria en I
- 29. uso práctico de la memoria virtual
- 30. Perfilado Redis Uso de la memoria
Duplicado: http://stackoverflow.com/questions/426396/how-much-memory-does-ac-net-object-use – FerranB
Parece que ... disculpa por :) :) – Svish