Pergunta

Estou a tentar fazer uma comparação entre Subsónico 3, Conjuntos de dados e o Entity Framework.A razão é que para o meu estágio eu tenho que deixar claro que as minhas escolhas.Até agora, eu sei ainda que Conjuntos de dados funciona da seguinte maneira: com a recuperação de dados:

  1. DB na memória
  2. consulta em base de dados em memória
  3. resultado da consulta

Entity Framework (.NET versão 3.5) faz da seguinte forma.(usando .net 3.5 porque ele precisa trabalhar no SharePoint 2010 e este só oferece suporte .net 3.5 devido a versão do CLR)

  1. consulta em DB
  2. resultado retornado em objetos na memória
  3. resultado retornado

Até agora eu não encontrei um regime Subsônico 3 como eles fazem isso.eu espero que um de vocês pode me ajudar

Foi útil?

Solução

É totalmente depende da estratégia que você está usando (ActiveRecord / LinqTemplates / SimpleRepository)

  • ActiveRecord:Cada Registro possui sua própria instância de um acordo de recompra, o que irá resultar no uso de memória alta para listas grandes.

  • LinqTemplates:Muito menos uso de memória, você tem uma instância do seu banco de dados que contém o esquema de cada tabela e os dados puros.

  • SimpleRepository Menos ainda, uma vez que o repo instância não sabe nada sobre o seu banco de dados.É quase só o uso do puro dados na memória.

Gostaria de sugerir o uso de ambos, o ActiveRecord e Linq Modelos.O Linq para consultar listas grandes, e o ActiveRecord para a edição de simples registros ou listas pequenas (<100 entradas).

Subsónico não fazer cache de design, então eu não me preocuparia com isso.Mas a grande coisa sobre o Linq coisas (para as três estratégias) é que você não acertar o banco de dados até que você precisar dos dados, assim você pode controlar o quanto de memória você utilizar.

Exemplo:

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

Atualização: Eu não sei que tipo de aplicação que você está desenvolvendo, mas se você precisar exibir dados em um DataGrid gostaria de sugerir o uso devexpress XtraGrid (disponível para WinForms, WPF/Silverlight e ASP.net), que tem uma ServerMode que funciona muito bem com o SubSonic é LinqTemplates (uma vez que pode ser vinculado a um IQuerable e a própria lida com a paginação/classificação/filtragem IQuerable, e precisa apenas de alguns registros em uma hora.Que reduziu significativamente o consumo de memória e desempenho do carregamento da nossa aplicação (que carregado um monte de registros em um datatable).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top