¿Cuál es el beneficio de desarrollar software de sistemas utilizando el marco de trabajo MFC (C ++) en lugar del marco .NET (VB, C #)?

Estoy programando en MFC ( Microsoft Foundation Classes ) usando VC ++ durante casi 14 años (Sí, aprendí MFC allá por el año 2002, todavía lo uso). Podría confirmar que MFC ya está en su lecho muerto, tomando el último aliento (no Visual C ++), para el desarrollo de la interfaz de usuario no necesita clases complejas proporcionadas por MFC, por ejemplo, si desea cambiar el color del botón que colocó en su cuadro de diálogo , debe crear una subclase basada en la clase CButton y anular la función DrawItem (puede visualizar el dolor y la cantidad de código que tiene que escribir para lograr una coloración simple del botón).

Ahora, si mira solo la perspectiva de la interfaz de usuario, MFC no tendrá ninguna posibilidad contra .Net, estaría de acuerdo, aunque el rendimiento es algo mejor en la aplicación basada en MFC, tiene más control sobre la administración de memoria y acceso directo a las API de Windows (a través de clases de envoltura y de otra manera funciones directas)

Sin embargo, con un procesador rápido y una memoria barata, estas ventajas están disminuyendo lentamente. Las empresas están migrando rápidamente la aplicación basada en MFC a la aplicación basada en .Net y la lógica empresarial, si hay alguna cargada en DLL, se llama directamente desde la aplicación más nueva.

La razón más común es el rendimiento , desarrollar una aplicación usando C ++ con MFC es mucho más complicado que usar C #, pero promete que uno tiene acceso directo a todas las API de Windows disponibles. Sin embargo, con la tecnología de procesador actual, casi no es diferente en términos de experiencia del usuario. La única razón para seguir usando MFC es cuando el rendimiento es un punto muy crítico que se debe lograr, por ejemplo: desea crear un servidor de correo como MDAEMON, que incluya la interfaz de usuario en una sola aplicación ejecutable.

En general, C / C ++ proporcionará un mejor rendimiento que el código .NET, aunque esto solo es relevante cuando el software pasa mucho tiempo en su código. Una aplicación generalmente pasa la mayor parte del tiempo en llamadas API, esperando la entrada del usuario, el acceso al disco, la pantalla de actualización, etc. He visto un factor de aceleración 2 en un algoritmo de retroceso simple sin asignaciones algunas versiones C # atrás. Jit podría estar mejor ahora.

Si escribe algoritmos que requieren mucho tiempo, puede obtener un rendimiento significativo al desarrollar en C / C ++.

Para el software del sistema, por ejemplo, controladores de dispositivos, la previsibilidad es la principal preocupación. Un ISR no puede permitirse el lujo de “colgarse” haciendo la recolección de basura o Jitting durante un par de milisegundos. Esto posiblemente podría ser resuelto por .NET nativo y prohibiendo las asignaciones de memoria de los ISR, pero aún no estamos allí.

Como siempre, use la mejor herramienta para este propósito.

En general, C ++ se usará donde el rendimiento y la función lo requieran. Por ejemplo, los controladores a menudo se escriben en C ++ porque es más fácil acceder al hardware sin pasar por un entorno administrado con todo lo que conlleva. Los juegos y los programas gráficos se escriben principalmente en C ++, pero no siempre. Las bibliotecas suelen ser C ++ (o envoltorios .net en bibliotecas C ++) simplemente porque la API de Windows fue diseñada para hablar con C ++ y el código administrado se interpone en el camino.

.net se usa prácticamente en todas partes (suponiendo Wintel) simplemente porque es más amable para el desarrollador y el mantenedor. El código se puede escribir más rápidamente y es más fácil de depurar.