Domanda

I'am prova a fare un confronto tra quadro con subsonici 3, set di dati e entità. La ragione per cui è che per il mio tirocinio devo chiarire le mie scelte.Fino ad ora so ancora che i set di dati funzionano nel modo seguente con il recupero dei dati:

    .
  1. db in memoria
  2. query su db in memoria
  3. Risultato dalla query

    Framework Entity (.NET versione 3.5) lo fa il seguente modo. (usando .NET 3.5 perché ha bisogno di lavorare su SharePoint 2010 e questo supporta solo .NET 3.5 a causa della versione CLR)

      .
    1. query su db
    2. Risultato restituito in oggetti in memoria
    3. Risultato restituito

      Fino ad ora non ho trovato uno schema per subsonico 3 come lo fanno. Spero che uno di voi possa aiutarmi

È stato utile?

Soluzione

Dipende totalmente dalla strategia che si sta utilizzando (APRECTORD / LINQTemplates / SimpleRepository)

    .
  • acptivecord: Ogni singolo record tiene la propria istanza in un repo, che porterà ad un elevato utilizzo della memoria per grandi elenchi.

  • linqtemplates: Molto meno utilizzo della memoria, hai un'istanza del tuo DB che detiene lo schema di ogni tabella e i dati puri.

  • Semplerepository Ancora meno, dal momento che l'istanza del repo non sa nulla del tuo database. È quasi solo l'utilizzo dei dati puri in memoria.

    Suggerirei di utilizzare entrambi i modelli di APRECTORD e LINQ. LINQ per interrogazioni di grandi liste e ActiveRecord per la modifica di singoli record o piccoli elenchi (<100 voci).

    Subsonic non fa la memorizzazione nella cache dal design, quindi non mi preoccuperei. Ma la cosa grande della roba Linq (per tutte e tre le strategie) è che non colpisci il database finché non hai bisogno dei dati, in modo da poter controllare la quantità di memoria che usi.

    Esempio:

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

    Aggiornamento: Non so quale tipo di applicazione stai sviluppando, ma se è necessario visualizzare i dati in un DataGrid, suggerirei di utilizzare DevExpress Xtragrid (disponibile per WinForms, WPF / Silverlight e ASP.NET) che ha un MODYMODE che funziona abbastanza bene Con i linqTemplates subsonic (poiché può essere vincolato a un querabile e per se stesso gestisce l'incollaggio / ordinamento / filtraggio su Iquadrabile e ha solo bisogno di alcuni record alla volta. Ciò ha notevolmente ridotto l'impronta di memoria e il caricamento delle prestazioni della nostra app (che ha caricato un grappolo di record in un datatariabile).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top