none
Versión Framework y AnyCPU-x86-x64 RRS feed

  • Pregunta

  • Buenos días a todos

    Tengo una aplicación desarrollada en Visual Studio 2013 y VB.NET que trabaja contra una base de datos SQL Server

    La aplicación está organizada en un exe (que es el que arranca la aplicación) y una serie de librerías dll que son los distintos mantenimientos de la aplicación (artículos, clientes, proveedores, etc.). Desde el exe, y según en la opción que pulsemos, invoco a la librería correspondiente para abrir el mantenimiento correspondiente.

    Hasta ahora tenía todo (exe y librerías) compilado con el Framework 3.5 y con la opción AnyCPU. He probado a compilar sólo el exe en x86 (dejando las librerías en AnyCPU) y el rendimiento mejoró considerablemente: abrir el mantenimiento de artículos pasó por ejemplo de llevar 4 segundos a llevar 2 (da igual que el equipo en el que lo ejecutara fuera de 32 o 64 bits)

    Ahora quería migrar la aplicación al Framework 4.0 y volver a poner todo en AnyCPU (porque entiendo que así se aprovechan mejor los recursos en las máquinas de 64 bits, que actualmente son casi la mayoría). Pero el rendimiento cayó en picado: abrir el mismo mantenimiento incluso aumentó a 5 segundos (casi el triple de como lo tengo)

    Y mi pregunta es: ¿cual sería la mejor combinación de framework/compilación para optimizar rendimiento y aprovechar los recursos de las máquinas? Practicamente el 100% de los servidores y equipos actuales tiran en 64 bits...

    ¿framework 4.0 o 4.5 y anycpu?

    ¿framework 4.0 o 4.5 y x64?

    ¿framework 4.0 o 4.5 y seguir en x86?

    ¿seguir en framework 3.5 y anycpu?

    ¿seguir en framework 3.5 y x86? (el que en principio va más rápido)

    ¿seguir en framework 3.5 y x64?

    ¿debería recompilar exe y librerías o sólo con el exe bastaría?

    La verdad es que estoy un poco perdido... entiendo que la lógica es pasar al framework más reciente y aprovechar los recursos de las máquinas de 64 bits, pero el rendimiento obtenido en las pruebas que hice son lamentables

    Resaltar también que la aplicación en algunos casos se conecta a bases de datos access. Leí en algún foro que para conectarse a access se necesita sí o sí compilar en x86, pero eran foros antiguos, de hace 5 o 6 años. No sé si actualmente esto sigue siendo así

    Un saludo y gracias de antemano por las respuestas


    miércoles, 15 de mayo de 2019 7:24

Respuestas

  • En teoría cada nueva versión del Framework contiene optimizaciones que lo hacen más rápido que las versiones anteriores. Desde este punto de vista, te interesaría compilar para la versión más moderna que puedas. Pero ten presente que eso implica que las máquinas en las que lo quieras ejecutar requieren instalar esa versión actualizada del Framework.

    En cuanto a los 32 o 64 bits: Los programas son más rápidos en 32 bits. Esa es la razón por la que Microsoft solo publica una versión de 32 bits de Visual Studio. Es considerablemente más rápido que el mismo Visual Studio compilado en 64 bits. La ventaja de compilar en 64 bits es que puede direccionar más memoria, pero si tu programa no hace uso de la memoria adicional esto no le aporta ninguna ventaja.

    Para acceder a la base de datos Access se necesita tener instalado el proveedor de OleDb con los mismos bits que tue aplicación. Es decir, si tu aplicación se ejecuta en 32 bits necesitas el proveedor OleDb de 32 bits, y si se ejecuta en 64 bits necesitas el proveedor de 64 bits. Si lo leíste en un foro antiguo, puede ser que en aquellos tiempos todavía no existiese la versión de 64 bits. El proveedor JET solo existe en 32 bits. Pero en la actualidad puedes usar en lugar del JET el proveedor ACE que está disponible en viersiones de 32 y 64 bits. Solo hay que recordar instalar la versión correcta para que concuerde con tu programa.

    miércoles, 15 de mayo de 2019 9:44

Todas las respuestas

  • En teoría cada nueva versión del Framework contiene optimizaciones que lo hacen más rápido que las versiones anteriores. Desde este punto de vista, te interesaría compilar para la versión más moderna que puedas. Pero ten presente que eso implica que las máquinas en las que lo quieras ejecutar requieren instalar esa versión actualizada del Framework.

    En cuanto a los 32 o 64 bits: Los programas son más rápidos en 32 bits. Esa es la razón por la que Microsoft solo publica una versión de 32 bits de Visual Studio. Es considerablemente más rápido que el mismo Visual Studio compilado en 64 bits. La ventaja de compilar en 64 bits es que puede direccionar más memoria, pero si tu programa no hace uso de la memoria adicional esto no le aporta ninguna ventaja.

    Para acceder a la base de datos Access se necesita tener instalado el proveedor de OleDb con los mismos bits que tue aplicación. Es decir, si tu aplicación se ejecuta en 32 bits necesitas el proveedor OleDb de 32 bits, y si se ejecuta en 64 bits necesitas el proveedor de 64 bits. Si lo leíste en un foro antiguo, puede ser que en aquellos tiempos todavía no existiese la versión de 64 bits. El proveedor JET solo existe en 32 bits. Pero en la actualidad puedes usar en lugar del JET el proveedor ACE que está disponible en viersiones de 32 y 64 bits. Solo hay que recordar instalar la versión correcta para que concuerde con tu programa.

    miércoles, 15 de mayo de 2019 9:44
  • Hola 

    Debido a que no hemos recibido alguna notificación que aún se esté presentando el problema que enuncias en tu consulta  y que la respuesta provista provee un amplio panorama y campo de acción sobre tu duda; vamos a considerar tu duda como resuelta debido a la respuesta apropiada proporcionada  y así proceder a calificar las misma como respuesta.

    No dudes en ampliar más sobre este tema si es que aún lo requirieras o de abrir una nueva consulta en caso de tener alguna situación o necesitarla con algún otro de los productos de Microsoft.

    Gracias por usar los foros de MSDN.

    Tonatiuh Abrego
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 22 de mayo de 2019 21:06
    Moderador