Re: Cargar funciones como strings

08/07/2004 - 17:05 por erseco | Informe spam
A mi si que me interesa esa clase, y una pregunta...

¿Es mas rapido ejecutar algo mediante scripting o con un case?

En mi caso tengo un Select Case bastante largo que evalua el valor de
un string, ejemplo:

select case nombre

case "pepe"
tabla = new pepe
case "jose"
tabla = new jose

end select

return tabla

tabla hereda de datatable, asi como pepe y jose (repito que es un
ejemplo)

por eso me interesa lo del script, porque me ahorro el case (que es
inmenso) ya que ejecuto la cadena "jose" para lanzar una nueva
instancia de la tabla jose

gracias!!
 

Leer las respuestas

#1 JM
12/07/2004 - 18:04 | Informe spam
hice la pregunta al principio, debido a que hago algo como
carga controles y eventos desde la BD. Entonces guardo los
comportamientos(eventos) en la BD los cuales quiero
relacionar con otros controles, una especie de libreria en
la BD(de hecho el modelo de BD se me ha hecho complejo),
apreciaria obeservaciones y/o preguntas
-La clase esta que adjuntas, es como un compilador?
-La memoria se veria "muy" afectada de hacerlo como quiero

Muy, muy, muy largo debería ser el Case para ser menos


eficiente que una
solución de ese tipo. Scripting, propiamente dicho, no ha


de ser demasiado
lento, puesto que el código se interpreta, pero no


serviría de nada en tu
caso. Por el contrario la clase que te he dicho, compila


el código, y si
bien lo hace al vuelo y en memoria, siempre es varios


órdenes más lento que
ejecutar unas cuantas sentencias.

No soy nada partidario de generar código en tiempo de


ejecución, puesto que
dificulta el mantenimiento de las aplicaciones. Casi


siempre hay buenas
alternativas. Pero si lo necesitas, te dejo mi clase y


estos ejemplos de
uso:

MsgBox(VBEvaluator.Eval("3 + 3 * (2 + 5)"))

Dim eval As New VBEvaluator()

eval.AddFunction("Sum", "a as integer, b as


integer", "return a + b")
eval.Compile()
MsgBox(eval.EvalFunction("Sum", 2, 3))
MsgBox(eval.EvalFunction("Sum", 12, 23))

Dim codigo As String = _
"Dim i as Integer" & vbCrLf & _
"For i = 1 to n" & vbCrLf & _
"MsgBox(i)" & vbCrLf & _
"Next"
eval.AddSub("Messages", "n as integer", codigo)
eval.ImportsList.Add("Microsoft.VisualBasic.Interaction")
eval.References.Add("Microsoft.VisualBasic.dll")
eval.Compile()
eval.CallSub("Messages", 7)

Juan Carlos Badiola
MVP - C#



Preguntas similares