Evaluar formulas

40 views
Skip to first unread message

Carina

unread,
May 6, 2013, 8:43:09 AM5/6/13
to altnet-...@googlegroups.com
Estimados,
 
Queria consultarles respecto a las posibles alternativas que conocen para  evaluar formulas literales (ej: "0.0015*10000").
 
Yo hace bastante trabaje importando las siguientes librerias:
 
using Microsoft.JScript;
using Microsoft.JScript.Vsa;
 
pero en versiones nuevas de .Net me dice que estan obsoletas buscando encontre que puedo parsear las formulas mediante reflection pero esto hace que mi app se vuelva poco performante sobre todo cuando se procesan archivos planos de gran tamaño.  Obviamente si la formula a evaluar fuese por unica vez no tendria este inconveniente.
 
Conocen alguna libreria u otra alternativa para parsear formulas ?
 
Aguardo su respuesta.
 
Saludos y muchas gracias.-
 
 
Carina Correjidor
 
 
 
 

 

 

Angel Java Lopez

unread,
May 6, 2013, 8:47:22 AM5/6/13
to altnet-...@googlegroups.com


2013/5/6 Carina <carinaco...@gmail.com>
 
 
 
 

 

 

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/altnet-hispano?hl=es.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Ale Miralles

unread,
May 6, 2013, 10:00:03 AM5/6/13
to altnet-...@googlegroups.com

Carina Correjidor

unread,
May 6, 2013, 10:43:55 AM5/6/13
to altnet-...@googlegroups.com
Muchas gracias Angel y Ale por las ideas. Estoy analizando que es mas practico y performante.
 
Y otras alternativas seran bienvenidas para poder enriquecer este foro..
 
Saludos y excelente jornada!!!

Carina Correjidor

Carina Correjidor

jose ubaldo carvajal

unread,
May 6, 2013, 5:26:59 PM5/6/13
to altnet-...@googlegroups.com

Saludos comunidad.

Actualmente me encuentro participando en un desarrollo que involucra evaluación de fórmulas(expresiones) que están en un formato string. He encontrado varias alternativas, librerías etc. Una opción(libreria) utiliza un método estático y otra utiliza una instancia de un objeto. ¿Es cierto que es más performante un llamado a un método estático que un llamado a un Método de una instancia?.

un saludo.

Gabriel Osorio

unread,
May 6, 2013, 5:31:24 PM5/6/13
to altnet-...@googlegroups.com

Ale Miralles

unread,
May 6, 2013, 7:16:10 PM5/6/13
to altnet-...@googlegroups.com

Hola Jose, hilando muy fino a nivel de micro optimización, se podria decir que el metodo estatico es mas performante que el metodo de instancia, simplemente porque tiene que ejecutar menos instrucciones para lograr el mismo resultado. A continuación te paso un ejemplo super sencillo pero alcanza para probar el punto.

 

En C#

    class Program {

        static void Main(string[] args) {

            //instancia

            var f = new Foo();

            f.PrintHello();

 

            //estatico

            Bar.PrintHello();

        }

    }

 

    class Foo {

        public void PrintHello() {

            Console.WriteLine("Hello world!");

        }

    }

 

    class Bar {

        public static void PrintHello() {

            Console.WriteLine("Hello world!");

        }

    }
 
 
En MSIL (resultante de compilar el fragmento de codigo anterior)
 
.method private hidebysig static void Main(string[] args) cil managed
{
    .entrypoint
    .maxstack 1
 
//instancia
    .locals init (
        [0] class ConsoleApplication2.Foo f)
    L_0000: nop 
    L_0001: newobj instance void ConsoleApplication2.Foo::.ctor()
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: callvirt instance void ConsoleApplication2.Foo::PrintHello()
    L_000d: nop 
 
//estatico
    L_000e: call void ConsoleApplication2.Bar::PrintHello()
    L_0013: nop 
    L_0014: ret 
}

 

 

Como se puede ver, en este caso invocar  la versión estatica requiere menos instrucciones que invocar la de instancia. Desde este punto de vista, una es mas performante que la otra.

De todas formas la ganancia que podes lograr con esas micro optimizaciones suele ser minima comparada con lo que ganarías utilizando, por ejemplo, callsite caching…

Dependiendo de cuan complejas sean las expresiones que tenes que evaluar, es muy probable que se pierda mas tiempo accediendo a una db o un recurso externo, que alocando un obj para poder invocar un método.

 

Saludos, Ale Miralles

Gabriel Osorio

unread,
May 6, 2013, 7:56:31 PM5/6/13
to altnet-...@googlegroups.com
No leí bien, disculpas.

Reply all
Reply to author
Forward
0 new messages