Pergunta

O que é preferível, mantendo um conjunto de dados em sessão ou preencher o conjunto de dados em cada nova postagem?

Foi útil?

Solução

Isso depende de muitos fatores. Geralmente é melhor não manter muitos itens na memória de sessão se a sessão é inproc ou em um servidor de estado, porque é menos escalável.

Se seus reside sessão no banco de dados, talvez seja melhor apenas para repetir a consulta e repovoar o conjunto de dados, a menos que a consulta é caro para executar.

Outras dicas

Não use a sessão !!! Se o usuário abre uma segunda guia com um pedido diferente a sessão será reutilizado e os resultados não serão os únicos que ele / ela espera. Você pode usar uma combinação de ViewState e Sessão mas ainda medir o quanto você pode manipular sem qualquer tipo de cache antes de recorrer a cache.

Depende de como fortemente você vai fazer isso e onde seus dados sessão é armazenado no servidor.

Manter os conjuntos de dados em sessão certamente afeta uso de memória . Todas as variáveis ??de sessão são armazenados na memória ou no servidor SQL, se você usar o estado SQL Server. Você também pode descarregar a carga para uma máquina diferente usando o modo de Estado Server.

O aspecto serialização / desserialização. Se você usar insanamente grandes conjuntos de dados que poderia influenciar o desempenho seide servidor mal.

Por outro lado tendo muito grandes ViewStates em páginas pode ser um assassino real desempenho . Assim, gostaria de manter conjuntos de dados em sessão ou no cache e olhar para um caminho "OutProc" a loja que os dados da sessão.

Desde que eu quero como poucas operações de banco de dados quanto possível, vou manter os dados na sessão, mas não tenho certeza qual seria a melhor maneira de fazê-lo. Como posso lidar com a concorrência e também porque os dados são compartilhados quando dois usuários usar simultaneamente a página como posso certeza cada um deles tem seu próprio conjunto de dados na sessão de fazer?

Eu costumo mantê-lo em sessão se não é muito grande e / ou o db é distante e lento. Se os dados é grande, em geral, é melhor para recarregar.

Às vezes eu uso o cache, eu carregar a partir Db pela primeira vez e colocá-lo no cache. Durante postback verifico o chache e se ele está vazio I recarga. Assim, o servidor gerenciar o cache por si só.

O problema com a sessão é que se está em proc poderia desaparecer que não é grande, se é servidor de estado, então você tem que serialize e se é sql sate seu está fazendo uma viagem de volta de qualquer maneira!

Se o conjunto de resultados é grande paginação Do personalizado para que você está apenas retornando um pequeno subconjunto dos resultados totais.

, em seguida, se você acha que mais de um usuário verá este conjunto de resultados colocar cada página no cache como as páginas de usuário certificando-se de que o cache é renovado quando as alterações de dados ou depois de um tempo não sendo acessado.

Se você não quer fazer muitas viagens de ida e você acha que você tem a memória, em seguida, bung todo o conjunto de dados no cache, mas tenha cuidado que não derrete o servidor web.

utilizando os meios de cache usuários não precisam seu próprio conjunto de dados, em vez que eles usam o conjunto global.

na medida em que a concorrência vai quando você carregar a página de inserção / edição você precisa preenchê-lo com dados novos e renovar o cache após o add / update.

Eu sou um grande crente na dissociação e eu raramente, ou nunca, vê a necessidade de lançar um conjunto de dados completo para a interface do usuário.

Você deve realmente só passar objetos para a interface do usuário que precisa ser usado a menos que você está mostrando um diagrama grande ou algum tipo de estrutura de dados que precisa exibir relações entre dados não vale a pena o custo.

subconjuntos de dados menores, quando aplicável, é muito mais eficiente. É a sua aplicação realmente usando todos os recursos dentro de um conjunto de dados sobre a interface do usuário? se não, então a melhor maneira de proceder seria apenas para passar os dados para fora que você está exibindo.

Se você está ligação de dados a um controle e classificação / paginação etc através dele, você pode implementar uma série de interfaces que permite que o conjunto de dados para apoiar esta, em parte muito menor de código.

Na mesma nota, eu iria manter os dados, que é em grande parte estático (por exemplo, ele não atualiza que muitas vezes) no cache. Então, você precisa olhar em como muitas vezes os dados são atualizados antes que você possa realmente fazer uma decisão para isso.

Por fim, eu vou dizer isso de novo, eu vejo a necessidade de utilizar um conjunto de dados na interface do usuário muito, muito rarely..it é um objeto de dados muito pesado e os benefícios de custo de olhar para os seus requisitos de dados, contra a facilidade de implementação , muito poderia superam a necessidade de armazenar em cache um conjunto de dados.

IMHO, conjuntos de dados são bastante ruim para usar se você está preocupado com o desempenho ou a utilização de memória.

A sua resposta não sugerem a utilização dos dados. Trata-se de dados de referência? O usuário está atualizando ativamente? É mais do que um utilizador pretende ter acesso atualização a qualquer momento um?

Sem qualquer melhor informação que você forneceu, ir com a sabedoria aceita que diz manter grandes quantidades de dados em sessão é uma forma de garantir que a sua candidatura irá não escala e exigirá recursos robustos para servir um punhado de pessoas.

Há geralmente são melhores maneiras de gerenciar grandes conjuntos de dados sem recorrer a carregar todos os dados na memória.

Na falta deste, se as suas necessidades de dados de aplicativos são verdadeiramente monsterous, então considerar um cliente pesado com um back-end de serviços web. Ele pode ser mais adequado do que fazer uma página web.

Como outras respostas têm notado, a resposta "depende". No entanto vou assumir que você está falando de dados que são compartilhados entre os usuários. Nesse caso, você deve não armazenar o conjunto de dados na sessão do usuário, mas repovoar no postback.

Além disso, você deve preencher um esconderijo perto da camada de acesso de dados de seu aplicativo para aumentar o desempenho interativo e reduzir a carga no banco de dados. O design do seu cache dependerá novamente o tipo de dados (somente leitura vs. leitura / gravação vs. leitura principalmente).

Esta abordagem separa a sessão do usuário (um conceito de camada UI) de gerenciamento de dados, e fornece o benefício adicional de suportar o uso compartilhado de dados em cache (em casos onde os dados é comum entre os usuários).

Nem - não "manter" qualquer coisa! Exibir apenas o que um usuário precisa ver e construir um esquema de paginação eficiente para ver filas para trás ou fowards.

rp

Tenha em sessão. Tem a opção de repovoar se você precisa, por exemplo, se a memória de sessão é apagado.

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