2009-02-18 14 views
16

Aprendí la programación de Windows usando 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 usando C#. Entiendo que la mayoría de las veces no hay mucha diferencia de rendimiento entre el código nativo y el código administrado. Así que me pregunto, si hoy comenzara a escribir una nueva aplicación de escritorio, ¿hay alguna razón (aparte del hecho de que estoy más familiarizado con C++), que podría querer escribirla en C++ no administrado en su lugar? de .NET? ¿Todavía hay algunas ventajas al usar C++ y el código nativo? ¿O ese método ha sido más o menos reemplazado por .NET en la plataforma de Windows?¿Qué ventajas hay para desarrollar una aplicación Win32 en C++ sobre una aplicación .NET en C#?

Por supuesto, sé que las personas que escriben controladores de dispositivos de bajo nivel y programas similares no lo harían en .NET. Pregunto en referencia a las aplicaciones típicas orientadas al cliente que no hacen llamadas directas de hardware.

+0

Si la decisión es entre Win32 y .Net ... vaya .Net Varias personas se quejan de no tener .Net para su plataforma ... pero si escribía para Win32 esta plataforma cruzada no es un problema. –

+3

Todavía desarrollo regularmente en C++ win32, incluidas las nuevas aplicaciones. La mayoría de nuestros programas son de naturaleza gráfica con muy pocas funciones comunes de UI. Encuentro que las personas que maldicen la memoria no gestionada solo suelen repetir lo que han escuchado y no tienen experiencia en C++. Prefiero estar "más cerca del hardware" para optimizar ciertos algoritmos. Además, corregiré un gran error: la curva de aprendizaje de win32 es MENOS que .NET y C# (dado que tienes experiencia en C++). Ver - http://www.charlespetzold.com/pw5/index.html. + win32 instala/ejecuta fácilmente todos los win vers. – Jeff

+0

Lo siento, pero rara vez veo aplicaciones .NET en acción. La mayoría de los programas de Windows de hoy están escritos en Win32API/MFC/Delphi/C++ Builder/wxWidget/Qt. – dns

Respuesta

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

Para enumerar algunos.

Sin embargo, es posible que también desee ver la pregunta desde el ángulo opuesto para evaluar de manera justa qué idioma utilizar.

Además, puede usar C++/CLI para incorporar código nativo y .net.

2

Huella de memoria. Pero a menos que esté desarrollando para una máquina con discapacidad grave en cuanto a la memoria, realmente no debería ser un problema para la mayoría de las aplicaciones.

+2

.NET tiende a "enganchar" la memoria y no liberarla nuevamente al sistema operativo a menos que la memoria disponible de esta última caiga por debajo de un umbral. Está bien si hay pocas instancias de su aplicación ejecutándose simultáneamente, usando la mayoría de los recursos para ella. En otras situaciones, es un desastre. –

8

Si su aplicación debe poder ejecutarse sin una instalación (es decir, si no puede o no debe hacer algo como instalar .NET Framework), no puede contar con que .NET esté en una máquina con Windows (pre-Vista). Muchas aplicaciones de utilidad pueden caer en esta categoría.

18

IMO, la más importante para aplicaciones pequeñas descargables es que el código nativo no necesita el tiempo de ejecución .NET. Mientras que la banda ancha se vuelve más y más común, no casi todos lo tienen todavía.

Algunas personas pueden sentirse decepcionadas al ver que su aplicación de 2 MB en realidad necesita otros 20 MB de descarga de infraestructura y un molesto proceso de instalación para ejecutar. Si no están seguros de si realmente necesitan o no su aplicación, podrían simplemente eliminarla antes de intentarlo y recurrir a un producto de la competencia.

+5

Ojalá pudiera votar esta vez más veces. Cuando quiero probar una nueva aplicación y me pide que instale un motor de ejecución que no tengo instalado, inmediatamente intento otra cosa. –

+0

¿Con qué frecuencia instala una nueva versión de .NET runtime o JRE? Creo que instalé .NET 3.5SP1 en agosto de 2008. –

+5

Olli: Usted es un desarrollador, lo que lo convierte en la élite de los usuarios de computadoras. A menos que sus clientes también sean desarrolladores (y especialmente si son usuarios inexpertos que apenas usan su computadora), es probable que aproximadamente la mitad de ellos no tenga instalado el tiempo de ejecución. –

2

Si puede pagar la dependencia de la pila, busque .NET Moderno, elegante, potente y, como resultado, mucho más rápido de desarrollar.

Pero tenga en cuenta que encadena su aplicación a la misma: al lenguaje y al marco, si prevé un futuro en el que puede querer escapar de esto, entonces es mejor que lo piense dos veces.

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

2

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

Cuando todas las máquinas tienen mono o NET, no será tan importante.

0

Dos cosas que se me ocurren.

  1. Protección de la propiedad intelectual. Es infinitamente más difícil para alguien aplicar ingeniería inversa a una aplicación C++ no administrada. Las aplicaciones administradas .Net o Java se pueden compilar fácilmente, pero este no es el caso con C++ no administrado.

  2. Velocidad. C++ está más cerca del hardware y tiene una huella de memoria más pequeña que el otro comentario mencionado. Esta es la razón por la que la mayoría de los videojuegos continúan escritos en C++ y ensamblado en línea.

+0

Comparando manzanas con plátanos. C++ es un lenguaje multiplataforma, que se puede usar para crear código dirigido al entorno .NET. Esta aplicación se descompilaría tan fácilmente como C#/CLR o Java/JVM. Y luego, si recuerdo correctamente, GCC puede compilar java a código nativo, por lo que este punto es discutible. –

+0

En realidad no es nada discutible, todo depende del compilador que use. Tu punto es verdadero si el código está compilado en código administrado. Pero si compilas a código no manejado, entonces mi punto sigue en pie. – James

+2

No es una protección, las técnicas de ofuscación para el código administrado son débiles en comparación. ¿Alguna vez has tratado de desensamblar el código nativo en C++? Créanme, es infinitamente más difícil de hacer que aplicar ingeniería inversa a una aplicación administrada donde hay herramientas gratuitas que hacen esto ahora. – James

7

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

Mis razones:

  1. pena de rendimiento es insignificante. Google para los puntos de referencia si no tomas mi palabra. Lo que más importa es el código en sí mismo. Puede escribir algoritmos O (n^m) en C++ o .NET/C#. Los motores JIT están muy maduros en estos días.
  2. no administrado C++ tiene grandes inconvenientes a la hora de pruebas unitarias, burlas y refactorización. Es muy engorroso e inflexible. La reflexión permite que el código administrado haga que todo esto sea muy conveniente.
  3. La implementación es un problema pequeño. Sin embargo, crear una configuración que verifique las condiciones previas de .NET necesarias y las instale automáticamente es una tarea obvia.
  4. Compilación es más rápido, sin enlazador! Incluso sucede en segundo plano cuando edita el código.
  5. .NET soporte de la biblioteca es mucho mejor y más limpio que STL, MFC y de impulso.
  6. Sin archivos de encabezado y macros. Son simplemente propensos a errores.
  7. Seguridad! Buenas desbordamientos de búfer, bye malos indicadores, variables sin inicializar ...
  8. Excepciones. Borrar la jerarquía de excepciones en .NET. Las excepciones de C++ están en mal estado.
+1

Nada podría estar más lejos de la verdad. La pena de rendimiento de correr es un entorno administrado es enorme. Usted tiene poco o ningún control sobre cómo se administra la memoria, esto es un desastre para las aplicaciones que necesitan rendimiento en tiempo real, como los videojuegos. Las soluciones administradas generalmente son las mejores para las aplicaciones de negocios. – James

+1

Y está atascado con una solución de solo Windows. Muy mal para todos los usuarios de Mac ... – user52875

+0

Concedido El C++ no administrado no tiene sentido para cada situación. Pero todavía tiene sus ventajas en ciertos escenarios por la intención de la pregunta original.Usted pensaría a partir de todos estos comentarios que C++ no administrado ya no tiene lugar (no es cierto). – James

0

. Los programas de red también tienen una vida útil de soporte, donde en realidad no es nativo. Native se ejecutará durante muchos años en diferentes sistemas operativos sin requerir actualizaciones.

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

.Net inicia lentamente el programa y se siente lento, nativo comienza rápido y funciona rápido.

.Net tiene que ser codificado por 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.

Utilice Delphi para nativo, no C++. .La red se basa parcialmente en Delphi RAD y el backend de Java.

Cuestiones relacionadas