none
ejecutar codigo guardado en base de datos en c# asp.net RRS feed

  • Pregunta

  • por ejemplo si en un campo de la base de datos guardo como varchar un método completo y luego en un webform lo mando llamar ese valor (código de la función) 

    se puede ejecutar esas instrucciones?

    Saludos.

    viernes, 22 de mayo de 2015 15:13

Respuestas

  • Una precaución en caso de que compiles sobre la marcha el código y lo cargues en memoria como se indica en esos artículos: Los códigos así cargados en memoria no se descargan nunca. Si es una aplicación web, con lo que presumiblemente entrarán muchos usuarios y se irán haciendo llamadas a muchos registros, todos ellos se irán quedando cargados en memoria. Y si llamas al mismo varias veces, y no haces nada para comprobar si ya estaba cargado, se cargará múltiples veces, con lo que la ocupación de memoria de tu aplicación irá creciendo sin límite.

    Un remedio es construir un nuevo AppDomain, cargar el ensamblado que acabas de compilar dentro del AppDomain, y después de ejecutarlo descargar el AppDomain. De esta forma sí que evitas que los compilados se acumulen en memoria.

    Otra alternativa, si la base de datos no tiene muchos registros, es juntar el código de todos ellos, compilarlo todo de golpe, y cargarlo una sola vez.

    Y luego está, claro, la clásica chapuza de configurar el reciclado de pooles en IIS de forma que cuando la memoria ocupada por la aplicación alcance un cierto límite, la aplicación se reinicie. Pero si estás usando el Session, se perderán todas las sesiones cuando eso suceda.

    viernes, 22 de mayo de 2015 16:57

Todas las respuestas

  • puedes compilar un clase al vuelo..,mira aqui

    http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime

    http://www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at-Runtime


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 22 de mayo de 2015 15:35
    Moderador
  • Una precaución en caso de que compiles sobre la marcha el código y lo cargues en memoria como se indica en esos artículos: Los códigos así cargados en memoria no se descargan nunca. Si es una aplicación web, con lo que presumiblemente entrarán muchos usuarios y se irán haciendo llamadas a muchos registros, todos ellos se irán quedando cargados en memoria. Y si llamas al mismo varias veces, y no haces nada para comprobar si ya estaba cargado, se cargará múltiples veces, con lo que la ocupación de memoria de tu aplicación irá creciendo sin límite.

    Un remedio es construir un nuevo AppDomain, cargar el ensamblado que acabas de compilar dentro del AppDomain, y después de ejecutarlo descargar el AppDomain. De esta forma sí que evitas que los compilados se acumulen en memoria.

    Otra alternativa, si la base de datos no tiene muchos registros, es juntar el código de todos ellos, compilarlo todo de golpe, y cargarlo una sola vez.

    Y luego está, claro, la clásica chapuza de configurar el reciclado de pooles en IIS de forma que cuando la memoria ocupada por la aplicación alcance un cierto límite, la aplicación se reinicie. Pero si estás usando el Session, se perderán todas las sesiones cuando eso suceda.

    viernes, 22 de mayo de 2015 16:57
  • hola

    existen dos caminos para lograrlo

    - CodeDOM

    - Roslyn

    Compilar y ejecutar funciones dinámicas de un archivo .txt desde un form

    un detalle, ojo que el metodo debe estar contenido dentro de una clase para poder compilarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 22 de mayo de 2015 17:03