Pregunta

Espero hacer una comparación entre el subsónico 3, los conjuntos de datos y el marco de la entidad. La razón por la cual es que para mi pasantía tengo que aclarar mis opciones.Hasta ahora lo sé, pero que los conjuntos de datos funcionan de la siguiente manera con recuperar datos:

  1. db en memoria
  2. consulta en DB en memoria
  3. resultado de la consulta

    Marco de entidad (.NET versión 3.5) lo hace de la siguiente manera. (usando .NET 3.5 porque necesita trabajar en SharePoint 2010 y este solo admite .NET 3.5 debido a la versión CLR)

    1. consulta en db
    2. resultado devuelto a objetos en la memoria
    3. resultado devuelto

      Hasta ahora no he encontrado un esquema para subsónicos 3 cómo lo hacen. Espero que uno de ustedes pueda ayudarme

¿Fue útil?

Solución

Depende totalmente de la estrategia que está utilizando (ActiverCord / LinqTemplates / SimpleRePosity)

  • activerecord: Cada registro solo tiene su propia instancia en un repo, lo que resultará en un alto uso de memoria para listas grandes.

  • linqtemplates: Mucho menos uso de la memoria, tiene una instancia de su DB que posee el esquema de cada tabla y los datos puros.

  • simpleprepository Incluso menos, ya que la instancia de Repo no sabe nada sobre su base de datos. Es casi solo el uso de los datos puros en la memoria.

    Sugeriría usar plantillas de actores activos y linq. LINQ para consultar listas grandes y actores para editar registros individuales o listas pequeñas (<100 entradas).

    subsónico no hace almacenamiento en caché por diseño, por lo que no me preocupo por eso. Pero lo mejor de las cosas de Linq (para las tres estrategias) es que no llega a la base de datos hasta que necesite los datos, para que pueda controlar la cantidad de memoria que usa.

    Ejemplo:

    var db = new NorthwindDb();
    
    // does not hit the database (just an expression)
    // since we only need ProductId and ProductName in this example,
    // there is no need to pull the entiry Product from the database.
    var query = from p in db.Products
                where p.CategoryId == 5
                select new {p.ProductId, p.ProductName };
    
    // executes: SELECT COUNT(*) FROM products WHERE categoryid = 5;
    var count = query.Count();
    
    // does not execute anything
    var top10 = query.Take(10);
    
    // executes: SELECT productid, productname
    //           FROM products WHERE categoryid = 5 LIMIT 10
    // LIMIT = MySQL paging, don't know how to write that for SQLServer
    // p in this example is not a product, but an anonymous type with
    // only two properties (ProductName and ProductId)
    foreach (var p in top10);
        Console.WriteLine("ProductId {0} Name {1}", p.ProductId, p.ProductName);
    

    Actualizar: No sé qué tipo de aplicación está desarrollando, pero si necesita mostrar datos en un DataGrid, sugeriría usar el Devexpress Xtragrid (disponible para WinForms, WPF / Silverlight y ASP.NET) que tiene un código de servidor que funciona bastante bien con las placas LINQTEMPLATES de Subsonic (ya que puede estar vinculada a una énquietable y en sí misma, se encarga de la paginación / clasificación / filtrado en la esencia y solo necesita algunos registros a la vez. Que redujo enormemente la huella de la memoria y el rendimiento de carga de nuestra aplicación (que cargó un montón de registros en un DataTable).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top