Mostrando postagens com marcador Programação. Mostrar todas as postagens
Mostrando postagens com marcador Programação. Mostrar todas as postagens

sexta-feira, 20 de março de 2009

Performance em ASP.NET: Desabilitar ViewState na Aplicação Inteira

Olá pessoal!

O ViewState é uma string armazenada em um campo oculto no HTML gerado para a sua página. Ele guarda os dados sobre a página e seus componentes, concatenado com um hash gerado no servidor para evitar ataques onde alguma pessoa maliciosa altere o conteúdo dessa string e faça um postback para o seu servidor. Essa string está em Base64, e é simples decodificar, como por exemplo usando o ViewState Decoder.

Cada componente colocado em uma página ASP.Net salva o seu estado no ViewState, para que cada vez que acontecer um postback esse componente possa voltar a ser exibido exatamente como estava antes, sem precisar fazer nova inicialização ou trazer os dados novamente do banco de dados, e assim por diante. Isso é prático, mas pode deixar o ViewState incrivelmente grande e aumentar bastante o tamanho da sua página e o tempo de carregamento por consequência.

Em páginas onde é desnecessário essa característica é recomendável desabilitar o ViewState ou então manter ele ativo apenas nos componentes em que é necessário, isso trará um aumento de performance na sua aplicação pois o navegador não precisará ficar enviando e recebendo essa string toda vez que é feita alguma requisição.

Por padrão o ViewState vem como True nos elementos, mas isso pode ser alterado facilmente mudando a propriedade EnableViewState para False. Agora se a sua aplicação já está pronta ou com a maior parte desenvolvida, você pode desativar o ViewState na aplicação inteira inserindo no arquivo web.config ou no machine.config o seguinte código:








Por enquanto é isso, para saber mais sobre o ViewState recomendo a leitura das referências, são dois excelentes artigos.

Referências
DotNetJohn || TechTips

sexta-feira, 3 de outubro de 2008

Artigo Nº 15: Trabalhando com Diretórios e Arquivos

Neste artigo veremos como criar diretórios, arquivos, listar os arquivos de um diretório em uma datagrid.

Primeiramente declare nas uses a System.IO; para poder utilizar-se desta biblioteca.

Para lista os arquivos de um diretório em uma datagrid, basta no onclick de um buttom, criar uma variável "Caminho" do tipo String, atribuir a ela uma caminho, no exemplo 1, esta sendo atribuido o caminho da aplicação no servidor da seguinte maneira "caminho := Server.MapPath('.');", após informado o diretório do qual se deseja listar os arquivos chamando a função no "datagrid.datasource := System.IO.Directory.GetDirectories(caminho);" e logo após chamar o porcedimento "DataGrid1.databind;".

Exemplo 1:
procedure TWebForm1.btn_listar_Click(sender: System.Object; e: System.EventArgs);
var
caminho : string;
begin
caminho := Server.MapPath('.');
DataGrid1.DataSource := System.IO.Directory.GetFiles(caminho);
DataGrid1.databind;
end;


Também é possivel listar apenas os subdiretório de um diretório conforme exemplo 2.

Exemplo 2:
procedure TWebForm1.btn_listar_1_Click(sender: System.Object; e: System.EventArgs);
var
caminho : string;
begin
caminho := Server.MapPath('.');
DataGrid1.DataSource := System.IO.Directory.GetDirectories(caminho);
DataGrid1.databind;

end;

Existe sim uma maneira de criar subdiretório no delphi, basta declara duas variáveis, a primeira deve ser com as informações do diretório, da seguinte maneira "pasta : System.IO.DirectoryInfo;" e a segunda uma variável String. Bom agora o procedimento de criação de diretório ou subdiretório pode ser feito de duas maneiras, veja o exemplo 3.

Exemplo 3:
procedure TWebForm1.btn_criar_Click(sender: System.Object; e: System.EventArgs);
var
pasta : System.IO.DirectoryInfo;//Declare a uses System.IO
caminho : string;
begin
caminho := Server.MapPath('.');
pasta := DirectoryInfo.Create('C:\');
pasta.CreateSubdirectory('temp\'+TextBox1.Text);
Directory.CreateDirectory(caminho+'/'+TextBox1.Text);
end;


É possivel verificar se um diretório já existe, quando se precisar dele, para não se tentar criar um diretório com o mesmo nome ,exemplo 4.

Exemplo 4:
procedure TWebForm1.btn_verificar_Click(sender: System.Object; e: System.EventArgs);
var
Caminho : String;
begin
Caminho := Server.MapPath('./teste');
if Directory.Exists(Caminho) then
Response.Write('Este Diretório ja Existe')
else
Response.Write('Este Diretório não Existe')
end;

Existem diversas outras funcionalidades dentro da biblioteca System.IO, basta implementar. Aqui vimos apenas 4 formas de se trabalhar com diretórios e arquivos.


Forte abraço e até a próxima.

terça-feira, 30 de setembro de 2008

O DELPHI é um POETA.!

Erros inusitados que você nunca viu por ai... rsrs



É gurizada no primeiro post, não saiu artigo por causa disso ai oh ...rsrsrs

quarta-feira, 24 de setembro de 2008

Delphi Tour em Porto Alegre

A Borland Latin America, distribuidora exclusiva da Embarcadero para a linha CodeGear no Brasil, realizou na terça-feira, 23, em Porto Alegre, o Delphi Tour.
O evento aconteceu na PUC-RS, das 9h às 12h45, contando com a presença do Sr. Andreano Lanusse (CodeGear/Embarcadero Evangelist Leader for Latin America), que vive atualmente na California USA e é responsável pela ferramenta de desenvolvimento de sistemas Delphi em toda a América Latina.

Andreano Lanusse, Fauzi Shubeita e Eu(Edinei Steffen)

O evento foi voltado a desenvolvedores de software, arquitetos de sistemas, líderes de projetos de software e gerentes de desenvolvimento, onde tiveram a oportunidade de conhecer os novos recursos do Delphi 2009, tais como: globalização de aplicações, criação de interfaces ricas para desktop, escalabilidade de aplicações e muito mais.

Entre as novas funcionalidades da ferramenta de desenvolvimento, o Delphi 2009 traz diversos avanços na VCL (Visual Component Library, ou Biblioteca de Componentes Visuais), permitindo a criação de aplicações com interface Ribbon (Recursos presentes no Office 2007), suporte a UNICODE (suporte a código de padrão mundial) e tradução de aplicações. Além disso, vem com o novo DataSnap framework, integrado ao dbExpress e sem dependência da tecnologia COM (Component Object Model).

E para aqueles que acreditavam que a partir da versão 2009 o Delphi não trabalharia mais com o .NET, não se preocupem segundo Andreano, no final do mês de novembro deste ano (2008) será lançado também o Delphi 2009 for .NET, incorporando as funcionalidades do Framework 3.5 da microsoft.

A empresa Embarcadero Technologies é a nova "dona" de ferramenta Delphi, onde a ferramenta só tende a crescer com mais força, pois a empresa dispõe de uma equipe com mais de 120 pessoas trabalhando no desenvolvimento e melhoramentos da ferramenta. Segundo Andreano, o Brasil ainda é considerado pequeno frente a outros países, como por exemplo a Rússia investiu neste ano, 1 milhão de licenças para distribuir entre escolas de Ensino Fundamental e Médio.

A Embarcadero Technologies Inc. auxilia desenvolvedores de aplicações e profissionais de bancos de dados fornecendo ferramentas para o design, construção e execução de aplicações de software no ambiente de preferência do cliente. Uma comunidade de mais de três milhões de pessoas ao redor do mundo e 90 empresas da Fortune 100 confiam nas linhas de produtos da CodeGear™ e da DatabaseGear™ da Embarcadero para aumentar a produtividade, a abertura da colaboração e a liberdade de inovar. Fundada em 1993 a Embarcadero tem sua sede em São Francisco, com escritórios espalhados pelo mundo.

t+
Edinei

sexta-feira, 19 de setembro de 2008

Artigo Nº 10: Cuidados com Performance em ASP.NET

Olá a todos...
Devido a alguns problemas nesse sentido andei pesquisando sobre o assunto, e objetivo aqui não é comparar qual a melhor maneira de utilizar os dois métodos, mas apenas alertar para possíveis esquecimentos que podem trazer sério problemas de performance às aplicações .NET.

DataReader x DataSet

DataReader
- É um objeto somente leitura e adiante, ou seja, não podemos navegar aleatoriamente utilizando este objeto;
- Trabalha conectado ao banco, deste modo, enquanto estivermos utilizando-o para extração de dados do banco, estaremos "pendurados" em uma conexão;
- Trabalha apenas com uma tabela por vez, ou seja, você deve configurar a string sql para a primeira tabela, conectar no banco, coletar suas informações e desconectar do banco. Para a segunda tabela você deverá fazer tudo novamente.
Observação importante: A conexão utilizada pelo DataReader deve ser aberta e fechada manualmente (exceto quando você informa que ela deverá ser fechada automaticamente)
DataSet
- Funciona como um cache in-memory, ou seja, você terá sua tabela totalmente disponível para uso, podendo fazer acesso aleatório às rows, inserir, alterar e deletar registros à tabela;
- Trabalha desconectado do banco, deste modo, trabalharemos com os registros sem ocupar uma conexão do banco;
- Trabalha com n tabelas por vez, disponibilizando, inclusive, a possibilidade de relacionamento entre as mesmas, dentre outras funcionalidades.
Observação importante: A conexão utilizada pelo DataSet não necessita ser aberta e/ou fechada manualmente. Ao chamar o método Fill do DataAdapter a conexão é aberta, são coletados os dados solicitados e a conexão é fechada.


Observação sobre os objetos Connection: É importante ressaltar que todas as conexões abertas manualmente devem ser fechadas manualmente (exceto quando chamar o ExecuteReader utilizando o CommandBehavior.CloseConnection). As conexões abertas e não fechadas, permanecerão abertas mesmo quando seu código estiver fora de escopo. As mesmas não serão fechadas automaticamente, e nem mesmo destruídas pelo Garbage Collector.


t+
Edinei

terça-feira, 9 de setembro de 2008

Artigo Nº 08: Customizando Calendar Extender com CSS no Rad Studio 2007

No Artigo Nº 05, foi comentado como aplicar o componente Calendar Extender do pacote Ajax Control Toolkit, agora vamos customizar o layout dele com estilo CSS.

Para começar, crie uma nova pasta chamada "estilos", dentro da pasta do projeto da aplicação. Depois, abra o bloco de notas ou notepad++ e salve esse arquivo dentro dessa pasta com o nome de "estilos.css", depois copie o código abaixo e cole no arquivo.

.calendario .ajax__calendar_container /*formatação da parte externa de onde encontra-se o corpo do calendário */

{background-color:#8080FF; border:solid 1px #004000;}

.calendario .ajax__calendar_header /*formatação do cabeçalho*/

{background-color:#ffffff; margin-bottom:3px; border:solid 1px #004000; width:170px;}

.calendario .ajax__calendar_title /*formatação do texto que encontra-se no cabeçalho*/

{color:black;}

.calendario .ajax__calendar_body /*formatação interna de onde se encontra o calendário(onde estão os dias do respectivo mês)*/

{background-color : white ;border : solid 1px #004000 ;}

.calendario .ajax__calendar_dayname /*formatação da descrição dos dias da semana*/

{text-align : center ; font-weight : bold ; margin-bottom : 4px ;margin-top : 2px ;color : blue;}

.calendario .ajax__calendar_day /*formatação dos dias do mês*/

{text-align : center ;color: black;}

.calendario .ajax__calendar_hover .ajax__calendar_day /*formatação para quando passar o mause sobre um determinado dia*/

{color: red;}

.calendario .ajax__calendar_hover .ajax__calendar_month /*formatação para quando passar mause sobre um determinado mês*/

{color: red;}

.calendario .ajax__calendar_hover .ajax__calendar_year /*formatação para quando passar o mause sobre um determinado ano*/

{color: red;}

.calendario .ajax__calendar_active /*formatação do dia, quando já possui uma data no textbox de controle*/

{background-color: #D4D0C8 ;font-weight : bold ; }

.calendario .ajax__calendar_today /*destaque para a data atual(Today)*/

{ font-weight : bold ; color : black;}

.calendario .ajax__calendar_other .ajax__calendar_day/*formatação dos dias que não pertencem ao mês selecionado*/

{color:#6A5ACD;}

.calendario .ajax__calendar_hover .ajax__calendar_today /*formatação para quando passar o mouse sobre a data atual(Today)*/

{color: #FFFFFF}

.calendario .ajax__calendar_hover .ajax__calendar_title /*formatação para quando passar o mouse sobre o texto do título*/

{color : red ; }

Salve e depois vá para o .aspx da página que você está utilizando o componente e dentro da tag HEAD, coloque o código seguinte logo abaixo da tag TITLE. Esse é o código responsável por buscar os estilos e aplicar na sua página.


Agora no design da página, selecione o componente CalendarExtender e na propriedade CssClass digite calendario, nome dado ao estilo. Daí só compilar e ver o resultado.

Mais detalhes, veja a edição 99 da revista ClubeDelphi.

Artigo Nº 07: Exemplo de Paginação GridView

Para criar uma paginação em uma GridView, adaptar o código abaixo:

quarta-feira, 3 de setembro de 2008

Artigo Nº 05: Usando Calendar Extender e Mask Edit do Ajax Control Toolkit no Rad Studio 2007

Adicionar os componentes ScriptManager e UpdatePanel na página.

Selecionar o ScritManager e alterar para True as propriedades EnableScriptGlobalization e EnableScriptLocalization no Object Inspector.

Alterar ou adicionar na Web.config o termo "GLOBALIZATION" por "<globalization culture="pt-BR" uiCulture="pt-BR"/>" (para traduzir o calendário em português).

Abrir o arquivo .aspx verifique se a tag "head" está como runat="server", caso não esteja, coloque-a.

OBS: o código do head deve ser alterado para todas as páginas, indiferente se terá ou não CalendarExtender.

CALENDÁRIO

Quando clicar no textbox:

Adicionar um TextBox, depois o componente CalendarExtender(para isso deve estar instalado o Ajax Control Toolkit), não precisa ser necessariamente ao lado do textbox, e sim no fim dos layout, mas dentro do UpdatePanel, isso porque o componente, no Delphi não no navegador, ocupa um espaço e assim desconfigurando o visual

Selecione o CalendarExtender e altere as seguintes propriedades:

targetcontrolid=(nome do textbox que receberá a data selecionada)

format=dd/MM/yyyy (formato da data)

firstdayofweek=Sunday (qual será o primeiro dia da semana que exibirá no calendário)

popupPosition = Rigth (como o calendário será exibido)

Quando quer colocar uma imagem para exibir o calendário:

Faça tudo da mesma forma que a de anterior

Coloque o componente ImageButton e o nome do ImageButton, colocar na propriedade PopupButtonID do "CalendarExtender".

MÁSCARA

Adicionar o componente "MaskEditExtender" da mesma forma que o "CalendarExtender" e alterar as seguintes propriedades:

TargetControlID= selecionar o textbox de controle

Selecione o TextBox e no objector Inspector procure as propriedade Extenders e altere as seguintes propriedades:

mask="99/99/9999"

masktype="Date"

No próximo artigo estaremos mostrando estilos CSS para o componente CalendarExtender;