(Esto estaba destinado a ser una pregunta hipotética en general, me lloriqueando que .NET era un cerdo y pidiendo razones. No fue realmente destinado a ser una pregunta acerca de mi aplicación específica.)¿Por qué .NET usa tanta CPU, es esto un problema?
Actualmente estoy reescribiendo algún viejo código de C++ en C#. Estamos portando todas las aplicaciones heredadas. Tengo aplicaciones C++ que toman MAX 3% de CPU. En general, no usan ninguno. Luego tomo el código, copio y pego, luego vuelvo a formatear a sintaxis C# y bibliotecas .NET, ¡y BAM! 50% de CPU. ¿Cuál es la razón de esto? Al principio pensé que era JIT, pero incluso después de que cada ruta de código haya sido ejercicios, y todo ha sido JIT ed, el mismo problema.
También he notado un gran aumento de memoria. Las aplicaciones que tomaron 9 MB ejecutando una carga completa ahora comienzan en 10 MB y se ejecutan en 50 MB. Me doy cuenta de que el hardware es barato, pero quiero entender qué causa esto. ¿Es motivo de alarma, o es .NET tanto que el cerdo?
Actualización 1 respuesta a skeet
estoy familiarizado con C#. Cambio las cosas a Linq, y así sucesivamente. Por lo general, tomo el código y reduzco el número de líneas, y así sucesivamente. ¿Podría dar algunos ejemplos más de lo que hace una persona de C++ en .NET?
Actualización 2
Esto estaba destinado a ser una cuestión general, pero la aplicación específica que tiene el problema es el siguiente.
Tiene un hilo que utiliza y un controlador ODBC para obtener datos de una paradoja db. A continuación, utiliza Linq para transformarlo a SQL db y publicarlo. Lo he pasado por ANTS profiler, y parece que el llenado del conjunto de datos lleva más tiempo. Seguido por la publicación de Linq. Sé que algunas de mis áreas son el uso de la reflexión, pero no veo cómo hacer lo que necesito sin esto. Planeo cambiar mi cadena a constructores de cadenas. ¿Hay alguna diferencia entre estos dos?
(int)datarow["Index"]
y
ConvertTo.Int32(datarow["Index"])
me cambió todo concatenación de cadenas a cadenas de formato. Eso no se redujo por encima de la cabeza. ¿Alguien sabe la diferencia entre un lector de datos vs adaptador de datos y conjuntos de datos?
En lugar de necesitar ejemplos teóricos, puede que sea mejor usar un generador de perfiles para ver por qué/dónde está gastando su CPU la aplicación. – ChrisW
Parece que puede ser la interacción con ODBC. ¿Hay un controlador .NET Paradox "nativo" disponible? –
50% CPU por cuánto tiempo? Para que tarea? En mini-benchmarks intensivos en CPU que he estudiado, C++ fue más rápido que C#, pero no mucho. En cada caso, saturé la CPU para obtener el mayor rendimiento. – Cheeso