--
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.
Creo que es un caso de uso interesante donde Roslyn puede llegar a funcionar muy bien
http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx
Hace tiempo arme algunos ejemplos sobre como implementar un DSL que utiliza Roslyn como back end.
http://alemiralles.blogspot.com.ar/2012/11/roslyn-shopping-cart-part-1.html
http://alemiralles.blogspot.com.ar/2012/11/roslyn-shopping-cart-dsl-part-2.html
http://alemiralles.blogspot.com.ar/2012/12/roslyn-shopping-cart-dsl-part-3.html
http://alemiralles.blogspot.com.ar/2012/12/roslyn-shopping-cart-dsl-part-4.html
Saludos, Ale Miralles.
Carina Correjidor
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.
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 //estaticoL_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