Autor Tema: una duda **existencial** (Benchmarking para vb.net, C#, C++)  (Leído 4423 veces)

0 Usuarios y 1 Visitante están viendo este tema.

sicario

  • Visitante
una duda **existencial** (Benchmarking para vb.net, C#, C++)
« : diciembre 28, 2007, 10:17:04 am »
Señores... ha llegado a mis manos la oportunidad de hacer un buen negocio, claro si logro desarrollar algo de respeto.. jejeje ... un buen negocio con una empresa internacional... pero tengo un leve problema.. que digo problema... problemota..

he estado testiando algunas demos de lo que deseo hacer.. y me entero que una misma aplicacion... creada en vb.net... es mas lenta si la creo con C# ... ahhh pero si esta misma herramienta la creo en c++ esta vuela como si del CONCORD se tratase.

pregunta:

¿Tecnicamente se puede demostrar en donde redunda la agilidad en procesos creados con c++?

o es solo una apreciacion mia?

Si estoy equivocado en lo que presiento... me gustaria me corrijan.. para asi yo entender si voy por el camino correcto o no.


Me gustaria que estudiantes de Ing. Le hicieran esa pregunta a sus catedraticos... pues me he sentido abochornado al saber que un lenguaje que no domino... parece ser la solucion a mi oportunidad de negocio.

PD:
si alguien me pudiera dar unas clasesitas rapidas de c++ podemos hacer trato...y sacan un par de billetillos extras..



Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #1 : diciembre 28, 2007, 01:33:38 pm »
en forma de "respuesta objetiva a tu pregunta especifica" te dire que entre VB.net y C# no deberian de haber diferencias abismales de velocidad de tratarse de la misma aplicación.

El problema es normalmente debido a las tecnicas usadas para hacer el programa y el dominio que tenia el programador del lenguaje.

Una vez lei algo bien interesant, que decia: "una aplicacion en VB6 puede vencer en velocidad a una en ASM si esta ultima esta desoptimizada o mal programada".

No soy quien para decirte exactamente en tu caso una aplicacion es mas rapida que otra, porque para eso deberias de adjuntar los 3 ejemplos y asi poder decir algo mas 'concreto'.

sicario

  • Visitante
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #2 : diciembre 28, 2007, 01:47:09 pm »
en forma de "respuesta objetiva a tu pregunta especifica" te dire que entre VB.net y C# no deberian de haber diferencias abismales de velocidad de tratarse de la misma aplicación.

El problema es normalmente debido a las tecnicas usadas para hacer el programa y el dominio que tenia el programador del lenguaje.

Una vez lei algo bien interesant, que decia: "una aplicacion en VB6 puede vencer en velocidad a una en ASM si esta ultima esta desoptimizada o mal programada".

No soy quien para decirte exactamente en tu caso una aplicacion es mas rapida que otra, porque para eso deberias de adjuntar los 3 ejemplos y asi poder decir algo mas 'concreto'.

Lastima no me he dado a entender... pero es justo lo que he hecho...

tengo una sencilla aplicacion de conexion a una base de datos.. en la cual corro un "select" a una tabla con un poco mas de 25 mil registros.
- En C# para presentarme los resultados de mi consulta se tarda 70 segundos con milesimas
- En Vb.net se tarda 80 segundos con milesimas
- En C++ la misma aplicacion se tarda 19 milesimas de segundos .....

entonces.. mi pregunta es... es o no es el C++ superior en "PERFORMANCE" que otros lenguajes de .net?

no se si me di a entender..por segunda vez...

Desconectado mxgxw

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5665
  • Starlet - 999cc
    • mxgxw
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #3 : diciembre 28, 2007, 01:53:34 pm »
Lastima no me he dado a entender... pero es justo lo que he hecho...

tengo una sencilla aplicacion de conexion a una base de datos.. en la cual corro un "select" a una tabla con un poco mas de 25 mil registros.
- En C# para presentarme los resultados de mi consulta se tarda 70 segundos con milesimas
- En Vb.net se tarda 80 segundos con milesimas
- En C++ la misma aplicacion se tarda 19 milesimas de segundos .....

entonces.. mi pregunta es... es o no es el C++ superior en "PERFORMANCE" que otros lenguajes de .net?

no se si me di a entender..por segunda vez...

mmmmm ok mira es dificil hablar de performance en la consulta de datos a una DB pk hay dos factores que tenes que tomar en cuenta.

El primero, es que el gestor de base de datos tomara un tiempo para realizar la misma consulta sobre el set de datos. Considerando que en tus pruebas utilizas el mismo gestor y la misma consulta. El tiempo del gestor se puede considerar una constante.

Ahora... la gran diferencia es la forma en que el lenguaje de programacion maneja los diferentes resultados.

Hace no mucho me encontre con un problema en el trabajo.... resulta que nosotros trabajamos con datos GIS, cada elemento de respuesta de una consulta puede pesar varios MB, estaba utilizando una capa de abstraccion de base de datos, que no estaba optimizada para manejar datos tan grandes....

El resultado, consultas simples tardaban anios en realizarse, y consultas grandes simplemente topaban la memoria.

como lo arreglamos??? pues en vez de usar la capa de abstraccion utilizamos las funciones nativas de acceso a la BD. Con eso ya pudimos acceder a todos los datos sin problemas.

Seguramente la gran diferencia en retardos no tenga que ver con el desempenio del programa, sino con los bibliotecas encargadas de realizar el acceso a datos. Yo te recomendaria investigaras bien la forma en que cada lenguaje procesa los resultados de las consultas y talvez de esa manera encontras una forma de optimizar para cada lenguaje.

Como te digo ahora y te vuelvo a repetir. La diferencia en tiempos no necesariamente indica que un lenguaje sea superior o inferior... sino que la forma en que se manejan los datos puede que no sea la mas optima para lo que intentas hacer.


sicario

  • Visitante
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #4 : diciembre 28, 2007, 01:59:32 pm »
gracias MX ... creo que por alli anda la cosa... pues en el caso de VB.net y C# .... estoy utilizando las librerias por defecto para acceso a la DB... valiendome para los resultados de un dataset.

empero con C++ es una biblioteca nativa... la cual creo tenga la respuesta en cuanto a la agilidad de devolver los datos consultados.

Ahora bien.... como puedo cambiar en Vb.net o C# el tipo de conexion? ... si no es atravez de ADO.NET cual seria una forma nativa? ... porque es obvio que en el acceso a los datos esta el meollo de asunto.  :thumbsup:

a ver quien se anima a opinar? .... aveces siento como si nadie tiene experiencia en acceso a datos masivos... ¿porque sera?  :drinks:

jester

  • Visitante
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #5 : diciembre 28, 2007, 02:30:24 pm »
Lo primero que tenes que saber si queres que tu programa vuele es:

1- usar un lenguaje interpretado o compilado?
si un lenguaje es compilado o no. Por aqui se comienza antes que nada.

Lenguaje Compilado (rapidos)

Un lenguaje compilado es término un tanto impreciso para referirse a un lenguaje de programación que típicamente se implementa mediante un compilador. Esto implica que una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc, Windows NT para Intel, etc.).
Es decir Un lenguaje compilado es aquel que, es traducido a código máquina y las instrucciones generadas, son interpretadas directamente por la máquina
C, C++, Pascal, Delphi, Kylix, Lazarus




Lenguaje Interpretado (lentos)

Un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una en tiempo de ejecución a un lenguaje intermedio o lenguaje máquina o a través de una máquina virtual, siendo típicamente unas 10 veces más lentos que los programas compilados.(Adaptación de la definición en Wikipedia)
Es decir un lenguaje interpretado, es aquel que es traducido a un lenguaje intermedio(entiéndase no-máquina), en la cual cada instrucción es interpretada y traducida a lenguaje máquina en tiempo de ejecución.
BASIC, Perl, PHP, Java, Visual Studio .NET


Conclusion: C/C++ siempre va hacer mucho mas rapido que .NET


Fuente:
http://robregonm.blogspot.com/2006/02/lenguajes-interpretados-vs-lenguajes.html




« Última Modificación: diciembre 28, 2007, 02:45:53 pm por jester »

sicario

  • Visitante
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #6 : diciembre 28, 2007, 03:01:42 pm »
ni hablar... hay que aprender C o C++ para hacer algo de respeto y estar a la altura de los grandes.

PD. les comento que hasta ahorita llevo dos horas despues de haber instalado C++ y apenas he logrado mandar un mensajito que diga "hola a todos" ... bueno.. como sea ya le pedi al niño dios me mande una neurona de repuesto.. porque quiero quemar la unica que tengo con el puto C XD

gracias a todos los que opinaron

Desconectado mxgxw

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5665
  • Starlet - 999cc
    • mxgxw
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #7 : diciembre 28, 2007, 04:34:11 pm »
Lo primero que tenes que saber si queres que tu programa vuele es:

1- usar un lenguaje interpretado o compilado?
si un lenguaje es compilado o no. Por aqui se comienza antes que nada.

Lenguaje Compilado (rapidos)

Un lenguaje compilado es término un tanto impreciso para referirse a un lenguaje de programación que típicamente se implementa mediante un compilador. Esto implica que una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc, Windows NT para Intel, etc.).
Es decir Un lenguaje compilado es aquel que, es traducido a código máquina y las instrucciones generadas, son interpretadas directamente por la máquina
C, C++, Pascal, Delphi, Kylix, Lazarus




Lenguaje Interpretado (lentos)

Un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una en tiempo de ejecución a un lenguaje intermedio o lenguaje máquina o a través de una máquina virtual, siendo típicamente unas 10 veces más lentos que los programas compilados.(Adaptación de la definición en Wikipedia)
Es decir un lenguaje interpretado, es aquel que es traducido a un lenguaje intermedio(entiéndase no-máquina), en la cual cada instrucción es interpretada y traducida a lenguaje máquina en tiempo de ejecución.
BASIC, Perl, PHP, Java, Visual Studio .NET


Conclusion: C/C++ siempre va hacer mucho mas rapido que .NET


Fuente:
http://robregonm.blogspot.com/2006/02/lenguajes-interpretados-vs-lenguajes.html


Lamento diferir contigo... pero tu respuesta no es completamente cierta.

Se podria decir que existen tres tipos de lenguajes... los que se compilan directamente a lenguaje maquina, como C, C++, Pascal, etc. Los que se compilan a pseudo-codigo y se ejecutan en maquina virtual como Java, la familia de lenguajes de .NET. Y por ultimo estan los lenguajes interpretados, como Perl, PHP los scripts de Shell, etc.

En tiempos antiguos la velocidad de los lenguajes compilados directamente a lenguaje maquina era indudablemente la mejor. No existian ni maquinas virtuales, ni interpretes lo suficientemente eficientes como para hacerles compentencia.

Luego de algun tiempo aparecio Sun y Java.... La idea primordial era que los programas escritos en Java se compilaban no a lenguaje maquina sino a un pseudo-codigo que se recompilaba en tiempo de ejecucion en la maquina destino.

Al principio las maquinas virtuales eran lentas y pesadas, porque no solo compilaban el programa sino una serie de bibliotecas, o el framework, lo que hacia que los programas parecieran lentos y pesados.

Luego se disenio lo que se le conoce como compilador JIT o compilador "Justo a Tiempo"... Este tipo de compiladores en vez de compilar todo el pseudo-codigo, solo compila las funciones que se vayan utilizando y va cargando las clases del framework en cuanto se necesite... con el tiempo los compiladores JIT fueron evolucionando y ahora no solo compilan, sino que realizan optimizaciones en tiempo de ejecucion que permiten a los programas compilados de esta manera utilizar de la mejor manera los recursos del sistema.

La flexibilidad e "inteligencia" de los compiladores JIT ha superado por mucho la compilacion "estatica" que se hace con los programas como C y C++... podes buscar en internet benchmarks de programas que corren sobre maquina virtual y compilados y te vas a dar cuenta que la diferencia entre un programa en C++ y Java o .NET es minuscula, superando incluso a veces el performance de C y C++ por mucho.

El futuro de los lenguajes esta en los que corren haciendo uso de compiladores JIT... la capacidad de que los programas se optimicen al momento en que estan corriendo ha provocado una oleada de lenguajes nuevos que corren bajo maquina virtual. Antes era casi que unicamente Java, ahora .NET funciona de una manera completamente similar y el desarrollo ahora esta no en desarrollar un compilador mas eficiente, sino uno mas inteligente.


Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #8 : enero 02, 2008, 10:49:52 am »
Nombre sicario 25 mil registros no están por cerca de ser datos masivos :p

Veo dos cosas que me llaman la atención decis esto

Citar
he estado testeando algunas demos de lo que deseo hacer.. y me entero que una misma aplicacion... creada en vb.net... es mas lenta si la creo con C# ... ahhh pero si esta misma herramienta la creo en c++ esta vuela como si del CONCORD se tratase.

Y luego esto

Citar
tengo una sencilla aplicación de conexión a una base de datos.. en la cual corro un "select" a una tabla con un poco mas de 25 mil registros.
- En C# para presentarme los resultados de mi consulta se tarda 70 segundos con milesimas
- En Vb.net se tarda 80 segundos con milésimas
- En C++ la misma aplicacion se tarda 19 milésimas de segundos .....

Primero que en c# te trabaja mas lento y luego proporcionas datos en donde c# te trabajo mejor :s no se si hubo confusión o que ondas.

Un factor que no estas tomando en cuenta es que configuración en tu base de datos tenes algun tipo de cacheo o algo así porque si estas corriendo la misma sentencia podría ser que tengas un buffer configurado y se ejecutara en diferentes tiempos.

No especificas si estas comparando .net con c++ pero te referis al c++ que viene en el visual studio de tipo managed que siempre hace de la misma manera uso de .net o si hablas de c++ propiamente dicho como un lenguaje aparte usando otro compilador que no sea el de microsoft.

Me atrevería a decir que simpre el c++ va a ejecutarse de una mejor manera que los de .net, pero comparar un bechmark con una base de datos sería algo en lo que como dicen otros comentarios ahi arriba tiene mucho que ver el sistema de base de datos.

Preguntabas acerca de los conectores y si estas usando por ejemplo MSSQL si tenes que usar los de ado.net de sql porque esos son los que vienen optimizados. Y los benchmarks así como estas haciendo podes sacarlo, solo sería necesario que veas lo que tenes que hacer y ocupes timers para ver los tiempos diferentes y vos solo podes sacar las conclusiones de como te funciona.

Algo muy importante es que programes de una manera muy similar en los diferentes lenguajes y no sea un factor la programación que haces determinante para que te parezca mejor uno u otro.

Por cierto revisate este benchmark
Código: [Seleccionar]
http://osnews.com/story.php/5602/Nine-Language-Performance-Round-up-Benchmarking-Math-and-File-IO/page3/
Tal vez te da una media idea pero ese bench es de math y de file IO , y es del 2004, para esta fecha me imagino que las cosas han cambiado mucho.
« Última Modificación: enero 02, 2008, 10:58:15 am por rdoggsv »

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: una duda **existencial** (Benchmarking para vb.net, C#, C++)
« Respuesta #9 : enero 02, 2008, 11:02:39 am »
Por cierto sicario que hay un monton de benchmarks en internet aqui esta otro de vb.net vs c#

Código: [Seleccionar]
http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2006/12/13/VB.NET-vs.-C_23002E00_NET.aspx
En ese te ponen codigo de vb.net y codigo de c# luego te dan el codigo decompilado y ves que producen el mismo resultado, pero en el performance c# queda mucho mejor que vb.net

Despues aparece que era un error en el manejo de un tipo de datos, y que al mostrar el codigo a interpretarse y ser el mismo en vb.net y el mismo en c#, deben de dar un performance casi identico.
« Última Modificación: enero 02, 2008, 11:17:26 am por rdoggsv »