No Richmond Code Camp , examinei alguns dos meus dicas e truques para fazer o ASP.NET funcionar o mais rápido possível . Uma das maiores coisas que você precisa fazer é reduzir o tamanho do seu ViewState e também movê-lo para o final da página . Fui informado que o View State pode ser retirado inteiramente da página à medida que está sendo enviado ao cliente (mais ou menos) e armazenado ou persistido como um arquivo local. Encontrei artigo de ponta de Dino Esposito sobre trabalhando com o ViewState onde ele demonstra esse princípio.

Eu tentei isso com algum código para ver o que aconteceu e fiquei agradavelmente surpreso que isso foi muito rápido e não produziu nenhuma exceção relacionada ao ViewState para mim. Vamos dar uma olhada, primeiro no ViewState original de uma página:

ZBYEZg9kFgQCAw8QZGQWAQIdBZAIfDxQrAAJkZGQCAQ9kFgQCAQ8WAh4HVmlza

WJsZWgWAgIBD2QWAgIBD2QWAgIFsDw8WAh4ISW1hZ2VVcmwFKmh0dHA6Ly9sb2

NhbGhvc3QvbWFjL2ltYWdlcy9jb250YWdN0XzMyLmdpZmRkAgUPZBYEAgEPFgIfAGcW

BAICD2QWAgIBDxYCHgRUZXh0BQ9MdaW5kYSBEZW1lcml0dGVkAgQPZBYEAgMPF

gIfAGcWAgICD2QWAgIBDxYCHwIFCfUFsYW4gSHVudGQCBQ8PFgIfAGhkZAICD2QW

AmYPZBYCAgEPFgIfAGhkGAEFJGNf0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkTXVsdG

lWaWV3MQ8PZAIBZBLDmk8f72Yt1WKBfAWhD8KS0hJhM”/>

Agora, esta é a tag de entrada ViewState usando a persistência PageState:

/wEPGAEFJGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjfEkTXVsdGlWaWV3MQ8PZAIBZA8FCTExNjE4Nz

U2Mg9kFgJmD2QWAgIBD2QWAgIOD2QWAgIBD2QWBGfYPZBYEAgMPEGRkFgECAWQCHw8UKwAC

ZGRkAgEPZBYEAgEPFgIeB1Zpc2libGVoFgICAQ9kFgICAQf9kFgICBQ8PFgIeCEltYWdlVXJsBSpodHRw

Oi8vbG9jYWxob3N0L21hYy9pbWFnZXMvY29udGFjdF8zMi5naWZkZAIFD2QWBAIBDxYCHwBnFgQCAg

9kFgICAQ8WAh4EVGV4dAUPTGluZGEgRGVtZfXJpdHRlZAIED2QWBAIDDxYCHwBnFgICAg9kFgICAQ8

WAh8CBQlBbGFuIEh1bnRkAgUPDxYCHw2AgoraQWBAIDDxYCHwBnFgICAg9kFgICAQ8

WAh8CBQlBbGFuIEh1bnRkAgUPDxAgora o problema com o arquivo ZWCADHGHWCZAgAgUPDxYCHwZAgoraQWCAD2 é vinculado a este arquivo ZWCADHGHWgZAgAgAgAgAgAgBg3g_WgZAgora está vinculado a ZWCADxAgWgZ_WC e o problema com o arquivo ZWCAD2. Portanto, você terá que construir um mecanismo de limpeza no aplicativo da web para manter o diretório o mais limpo possível. Por motivos de segurança, você também não pode ter permissão para armazenar mídia criada em tempo real ou carregada por usuários da web. Decidi que uma boa maneira de contornar esse problema seria armazenar o ViewState no cache com uma dependência. É claro que isso causa considerações sobre o uso de memória, então você terá que decidir o que é mais importante na sua situação.

Eu gosto de usar o Enterprise Library para lidar com minhas necessidades de cache, então você precisará investigar isso no seu, ou espere eu terei a chance de fazer um blog sobre o uso o bloco de cache. Mas até então, acredite em mim, isso funciona. A metodologia depende de dois métodos especiais sendo criados. Criei esses métodos para abstrair a metodologia dos dois métodos da classe Page que precisam ser substituídos. Também criei um método utilitário para retornar o id de sessão como um nome para a variável Cache, novamente apenas para abstrair isso.

Protegido

Função

LoadPageStateFromCache ()

As

Object

Dim

m_viewState

As

String

Dim

m_formatter

As

LosFormatter

Dim

viewStateBag

As

Objeto

Dim

pc

As

CacheManager=CacheFactory.GetCacheManager ()

Dim

sRequestContent

As

String

=

DirectCast

(pc.GetData (GetCacheName),

String

)

If

String

.IsNullOrEmpty (sRequestContent)=

False

Then

Dim

sr

As

Novo

StringReader (sRequestContent)

m_viewState=sr.ReadToEnd ()

sr.Close ()

m_formatter=

Novo

LosFormatter ()

viewStateBag=m_formatter.Deserialize (m_viewState)

Fim

If

Retorno

String

. Vazio

End

Função

Protected

Sub

SavePageStateToCache (

ByVal

viewStateBag

As

Objeto

)

Dim

m_formatter

As

LosFormatter=

Novo

LosFormatter ()

Dim

stw

As

StringWriter=

Novo

StringWriter

m_formatter.Serialize (stw, viewStateBag)

Dim

primitivesCache

As

CacheManager=CacheFactory.GetCacheManager ()

primitivesCache.Add (GetCacheName, stw.ToString ( ), CacheItemPriority.Normal,

Novo

ExCacheRefreshAction, _

Novo

AbsoluteTime (DateAdd (DateInterval.Minute, Session.Timeout + 30, Now ())))

Fim

Sub

Protegido

Sobrecargas

Substitui

Função

LoadPageStateFromPersistenceMedium ()

As

Object

Retorno

LoadPageStateFromCache ()

‘Re turn LoadPageStateFromFile ()

‘Return MyBase.LoadPageStateFromPersistenceMedium ()

End

Função

Protegido

Overloads

Overrides

Sub

SavePageStateToPersistenceMedium (

ByVal

viewStateBag

As

Objeto

)

SavePageStateToCache (viewStateBag)

‘SavePageStateToFile (viewStateBag)

‘MyBase.SavePageStateToPersistenceMedium(viewStateBag)

End

Sub

Privado

Função

GetCacheName ()

As

String

Retorno

Session.SessionID.ToString

End

Function

Um truque que eu faço, só para ser um pouco seguro é dizer à dependência do Cache para manter o valor na memória por 30 minutos após o tempo limite da sessão. Isso nos levará a criar um manipulador para permitir que o usuário saiba que sua sessão expirou. Eu sei que sou muito ruim em estar sempre com meu computador ligado e em cerca de 20 páginas o tempo todo. Isso significa que muitas dessas páginas sem estado eventualmente causarão uma postagem de volta no servidor quando eu voltar a ele. Meu aplicativo de banco on-line faz isso se eu deixá-lo em execução sem postback em, digamos, 10 minutos, portanto, é um cenário comum de lidar. Isso levará a outra entrada do blog. Espero tê-lo pronto no NJ Code Camp neste fim de semana.

Compartilhe este artigo com seus amigos!

Source link

Categories: Wordpress