¿Qué ventajas tiene para el desarrollo de una aplicación Win32 en C ++ a través de una aplicación .NET en C #?

StackOverflow https://stackoverflow.com/questions/562620

Pregunta

He aprendido ventanas de programación utilizando Visual C ++, y la API de Win32. Hoy en día, parece que la mayoría de las aplicaciones se están desarrollando en .NET con C #. Yo entiendo que la mayoría de las veces no hay mucha diferencia de rendimiento entre el código nativo y código administrado. Así que me pregunto, si yo fuera a empezar a escribir una nueva aplicación de escritorio de hoy, ¿hay alguna razón (aparte del hecho de que estoy más familiarizado con C ++), que puede ser que desee escribir en no administrado C ++ en vez de .NET? ¿Todavía hay algunas ventajas de utilizar C ++ y código nativo? O ha sido que el método más o menos reemplazado con .NET en la plataforma Windows?

Por supuesto que sé que las personas que están escribiendo los controladores de dispositivo de bajo nivel y programas similares no lo harían en .NET. Estoy pidiendo con referencia a las aplicaciones típicas de cara al cliente que no hacer llamadas directas de hardware.

¿Fue útil?

Solución

  • Rendimiento (ciertas situaciones, tales como gráficos)
  • huella de memoria (como se dijo Mancuso)
  • Uso de las bibliotecas existentes
  • No hay necesidad de un tiempo de ejecución
  • Control Finer

Para sólo mencionar algunos.

Sin embargo, también es posible que desee considerar la cuestión desde el ángulo opuesto para evaluar bastante el idioma a utilizar.

Además, se puede usar C ++ / CLI para incorporar tanto el código nativo y .NET.

Otros consejos

OMI el más importante para las pequeñas aplicaciones descargables es que el código nativo no necesita el tiempo de ejecución de .NET. Mientras que la banda ancha es cada vez más común no casi todo el mundo lo tiene todavía.

Algunas personas pueden ser decepcionado al ver que su solicitud de 2 MB en realidad requiere de otro marco 20 MB de descarga y un proceso de instalación molestos para funcionar. Si no están seguros de si son o no realmente necesitan su aplicación, en primer lugar, puede ser que simplemente eliminarlo antes de siquiera darle una oportunidad y se convierten en un producto de la competencia.

Si su aplicación tiene que ser capaz de funcionar sin una instalación (es decir, si usted no puede o no debe hacer algo como instalar la plataforma .NET), no se puede contar con .NET estar en una máquina Windows ( pre-Vista). Un montón de aplicaciones de servicios públicos pueden caer en esta categoría.

Yo recomendaría para escribir todas las aplicaciones de escritorio en código administrado. .NET / C # es una gran plataforma para hacerlo.

Mis razones:

  1. penalización de rendimiento es insignificante . Google para los puntos de referencia si usted no toma mi palabra. Lo que importa más es el propio código. Puede escribir O (n ^ m) algoritmos en C ++ o .NET / C #. motores JIT son muy maduro en estos días.
  2. No administrado C ++ tiene grandes inconvenientes cuando se trata de unidad de pruebas, burlas y refactorización . Es muy engorroso y poco flexible. La reflexión permite que el código para hacer tales cosas muy conveniente administrado.
  3. El despliegue es un pequeño problema. Sin embargo, la creación de una configuración que comprueba las condiciones previas necesarias .NET y los instala automáticamente es una obviedad.
  4. La compilación es más rápido, sin enlazador ! Incluso se produce en segundo plano cuando se edita el código.
  5. .NET soporte de la biblioteca es mucho mejor y más limpio que STL, MFC y de impulso.
  6. No hay archivos de cabecera y macros . Ellos son sólo propenso a errores.
  7. Seguridad ! Buenas desbordamientos de búfer bye, malos indicadores, variables sin inicializar ...
  8. Excepciones . jerarquía clara excepción en .NET. excepciones de C ++ están en mal estado.

huella de memoria. Pero a menos que usted está desarrollando para una máquina gravemente discapacitados memoria sabia, lo que realmente no debería ser un problema para la mayoría de aplicaciones.

Si usted puede permitirse la dependencia de la pila, vaya para .NET Moderno, elegante, potente y como resultado mucho más rápido para desarrollar.

Sin embargo, se da cuenta de que se encadenan su aplicación a la misma -. A la lengua y el marco, si FORSEE un futuro en el que es posible que desee escapar de esto, entonces es mejor pensar dos veces

Win32 es viejo y anticuado, pero funciona en prácticamente cualquier versión de Windows sin dependencias adicionales, y su código puede ser en la llanura, portátil, C / C ++.

1 para no tener que requerir un paquete .NET / instalar en la máquina (s) de destino. Esto sigue siendo un gran problema.

Cuando todas las máquinas tienen mono o NET no será un gran problema.

Dos cosas que se me ocurren.

  1. La protección de la propiedad intelectual. Es infinitamente más difícil para alguien a realizar ingeniería inversa a una aplicación C ++ no administrado. Gestionadas aplicaciones .Net o Java pueden ser fácilmente DE-compilados esto no es el caso de C ++ no administrado.

  2. Velocidad. C ++ es más cercano al hardware y tiene un menor consumo de memoria como el otro comentario mencionado. Esta es la razón por la mayoría de los videojuegos siguen siendo escrito en C ++ y ensamblador en línea.

Los programas .Net también tienen una vida útil de apoyo, donde los nativos no lo hacen realmente. Nativo tendrá una duración de muchos años a través de diferentes sistemas operativos sin necesidad de actualizaciones.

.Net programas pueden ser expuestos a chorro por la mala configuración de .NET, nativo sólo sigue corriendo y apenas se efectúa mediante actualizaciones del sistema operativo.

programas

.Net inicio lento y se siente lento, nativa comienza rápido y corre rápido.

NET tiene que ser codificado para el mínimo común denominador (versión marco más distribuida), nativo compila todo el código en la aplicación - a fin de utilizar lo que quiere

.

El uso de Delphi nativo, no C ++. Net se basa parcialmente en Delphi y Java RAD backend.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top