Question

J'essaie de faire une comparaison entre les ensembles de données subsoniques 3, le cadre d'entité. Jusqu'à présent, je sais encore que les ensembles de données fonctionnent de manière suivante avec la récupération des données:

  1. Db dans la mémoire
  2. requête sur db en mémoire
  3. résulter de la requête

Entity Framework (.NET version 3.5) le fait de la manière suivante. (Utilisation de .NET 3.5 car il doit fonctionner sur SharePoint 2010 et celui-ci ne prend en charge que .NET 3.5 en raison de la version CLR)

  1. requête sur db
  2. Résultat renvoyé dans les objets en mémoire
  3. Résultat renvoyé

Jusqu'à présent, je n'ai pas trouvé de programme pour subsonic 3 comment ils le font. J'espère que l'un de vous pourra m'aider

Était-ce utile?

La solution

Cela dépend totalement de la stratégie que vous utilisez (ActiveRecord / LinqTemplates / SimpleRepository)

  • ACTIVERECORD: Chaque enregistrement contient sa propre instance à un dépôt, ce qui entraînera une utilisation élevée de la mémoire pour les grandes listes.

  • LinqTemplates: beaucoup moins d'utilisation de la mémoire, vous avez une instance de votre base de données qui contient le schéma de chaque table et les données pures.

  • SimpleRepository encore moins, car l'instance Repo ne sait rien de votre base de données. Il ne soit presque que l'utilisation des données pures en mémoire.

Je suggérerais d'utiliser les deux modèles ActiveRecord et Linq. Linq pour interroger les grandes listes, et activeRecord pour modifier des enregistrements uniques ou de petites listes (<100 entrées).

Subsonic ne fait pas de mise en cache par conception, donc je ne m'inquiéterais pas à ce sujet. Mais la grande chose à propos des trucs LINQ (pour les trois stratégies) est que vous ne frappez pas la base de données avant d'avoir besoin des données, afin que vous puissiez contrôler la quantité de mémoire que vous utilisez.

Exemple:

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);

Mise à jour:Je ne sais pas quel type d'application vous développez, mais si vous avez besoin d'afficher des données dans un dataGrid, je suggère d'utiliser le Devexpress XTragrid (disponible pour WinForms, WPF / Silverlight et ASP.NET) qui a un serveur qui fonctionne assez bien avec LinqTemplates de subsonic (car il peut être lié à un iQueable et lui-même gère la pagination / tri / filtrage sur l'iQueable et n'a besoin que de quelques enregistrements à la fois. tasse d'enregistrements dans un dataTable).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top