Veja o exemplo abaixo:
if(ScriptManager.GetCurrent(Page).IsInAsyncPostBack) { //Código executado quando ocorrer um postback por causa de uma requisição Ajax }
Blog com dicas úteis e práticas para soluções de problemas enfrentados durante o desenvolvimento de software. Blog focado em ASP.NET, C# e notícias sobre tecnologia.
if(ScriptManager.GetCurrent(Page).IsInAsyncPostBack) { //Código executado quando ocorrer um postback por causa de uma requisição Ajax }
Melhor arquitetura do software, melhor modelagem, melhor servidor, prever número de acessos… muitas coisas influenciam na performance de uma aplicação asp.net.
Além de tentar melhorar esses “pilhares” da performance, é necessário rever questões simples de desenvolvimento. Muitas vezes, simples detalhes de lógica de desenvolvimento é o ponto mais crítico e crucial para acabar com desempenho de qualquer aplicação.
DEV411 - ASP.NET: Best Practices For Performance
10 Tips for Writing High-Performance Web Applications
Nos dois links acima existem pontos bem interessantes relacionados a performance e desenvolvimento.
Acredito que dois pontos bem relevantes são:
Para remover os acentos de Strings aplica-se o seguinte método:
public static string RemoveAcento(this string texto)
{
texto = texto.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();
foreach (char c in texto.ToCharArray())
{
if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
{
sb.Append(c);
}
}
return sb.ToString();
}
Créditos: R0drigo da Silva Araujo
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");Formatando a String
DateTime now = new DateTime(2006, 9, 07, 15, 06, 01, 08, DateTimeKind.Local); now.ToString(); //"09/27/2006 15:06:01" //Year now.ToString("%y"); //"6" now.ToString("yy"); //"06" now.ToString("yyy"); //"2006" now.ToString("yyyy"); //"2006" //Month now.ToString("%M"); //"9" now.ToString("MM"); //"09" now.ToString("MMM"); //"Sep" now.ToString("MMMM"); //"September" //Day now.ToString("%d"); //"7" now.ToString("dd"); //"07" now.ToString("ddd"); //"Thu" now.ToString("dddd"); //"Thursday" //Hour now.ToString("%h"); //"3" now.ToString("hh"); //"03" now.ToString("hhh"); //"03" now.ToString("hhhh"); //"03" now.ToString("%H"); //"15" now.ToString("HH"); //"15" now.ToString("HHH"); //"15" now.ToString("HHHH"); //"15" //Minutes now.ToString("%m"); //"3" now.ToString("mm"); //"03" now.ToString("mmm"); //"03" now.ToString("mmmm"); //"03" //Seconds now.ToString("%s"); //"1" now.ToString("ss"); //"01" now.ToString("sss"); //"01" now.ToString("ssss"); //"01" //Milliseconds now.ToString("%f"); //"0" now.ToString("ff"); //"00" now.ToString("fff"); //"008" now.ToString("ffff"); //"0080" now.ToString("%F"); //"" now.ToString("FF"); //"" now.ToString("FFF"); //"008" now.ToString("FFFF"); //"008" //Kind now.ToString("%K"); //"-07:00" now.ToString("KK"); //"-07:00-07:00" now.ToString("KKK"); //"-07:00-07:00-07:00" now.ToString("KKKK"); //"-07:00-07:00-07:00-07:00" // Note: The multiple K were just read as multiple instances of the // single K DateTime unspecified = new DateTime(now.Ticks, DateTimeKind.Unspecified); unspecified.ToString("%K"); //"" DateTime utc = new DateTime(now.Ticks, DateTimeKind.Utc); utc.ToString("%K"); //"Z" //TimeZone now.ToString("%z"); //"-7" now.ToString("zz"); //"-07" now.ToString("zzz"); //"-07:00" now.ToString("zzzz"); //"-07:00" //Other now.ToString("%g"); //"A.D." now.ToString("gg"); //"A.D." now.ToString("ggg"); //"A.D." now.ToString("gggg"); //"A.D." now.ToString("%t"); //"P" now.ToString("tt"); //"PM" now.ToString("ttt"); //"PM" now.ToString("tttt"); //"PM"Ou então utilizando as formatações padrões já existentes.
now.ToString("d"); // "09/27/2006" now.ToString("D"); // "Tuesday, 27 September 2006" now.ToString("G"); // "09/27/2006 14:15:39"Abaixo estão os padrões existentes.
String.Format("{0,-10}", "apple"); //"apple " String.Format("{0,10}", "apple"); //" apple"formatString(opcional):
int pos = 10; int neg = -10; int bigpos = 123456; int bigneg = -123456; int zero = 0; string strInt = "120ab"; String.Format("{0:00000}", pos); //"00010" String.Format("{0:00000}", neg); //"-00010" String.Format("{0:00000}", bigpos); //"123456" String.Format("{0:00000}", bigneg); //"-123456" String.Format("{0:00000}", zero); //"00000" String.Format("{0:00000}", strInt); //"120ab" String.Format("{0:#####}", pos); //"10" String.Format("{0:#####}", neg); //"-10" String.Format("{0:#####}", bigpos); //"123456" String.Format("{0:#####}", bigneg); //"-123456" String.Format("{0:#####}", zero); //"" String.Format("{0:#####}", strInt); //"120ab" String.Format("{0:X00000}", pos); //"A" String.Format("{0:X00000}", neg); //"FFFFFFF6" String.Format("{0:X#####}", pos); //"X10" String.Format("{0:X#####}", neg); //"-X10"Zeros (opcional):
int neg = -10; int pos = 10; // C or c (Currency): quantidade de casas decimais que aparecerá. String.Format("{0:C4}", pos); //"$10.0000" String.Format("{0:C4}", neg); //"($10.0000)" // D or d (Decimal): quantidade de zeros à esquerda. String.Format("{0:D4}", pos); //"0010" String.Format("{0:D4}", neg); //"-0010" // E or e (Exponential): quantidade de casas decimais que aparecerá. String.Format("{0:E4}", pos); //"1.0000E+001" String.Format("{0:E4}", neg); //"-1.0000E+001" // F or f (Fixed-point): quantidade de casas decimais que aparecerá. String.Format("{0:F4}", pos); //"10.0000" String.Format("{0:F4}", neg); //"-10.0000" // G or g (General): não faz nada String.Format("{0:G4}", pos); //"10" String.Format("{0:G4}", neg); //"-10" // N or n (Number): quantidade de casas decimais que aparecerá. String.Format("{0:N4}", pos); //"10.0000" String.Format("{0:N4}", neg); //"-10.0000" // P or p (Percent): quantidade de casas decimais que aparecerá. String.Format("{0:P4}", pos); //"1,000.0000%" String.Format("{0:P4}", neg); //"-1,000.0000%" // R or r (Round-Trip): representa uma formatação inválida, e "joga" uma FormatException String.Format("{0:R4}", pos); //FormatException thrown String.Format("{0:R4}", neg); //FormatException thrown // X or x (Hex): quantidade de zeros à esquerda String.Format("{0:X4}", pos); //"000A" String.Format("{0:X4}", neg); //"FFFFFFF6" // Nada: representa uma formatação inválida, porém, não "joga" uma FormatException String.Format("{0:4}", pos)); //"4" String.Format("{0:4}", neg)); //"-4"Créditos: Kathy Kam
Este documento da MSDN patterns & practices aborda várias questões de modelagem de banco de dados, arquitetura de software, camadas de negócio e acesso a dados, melhoria de desempenho, etc...
Ferramenta extremamente útil para quem quer aprender a programar APIs do google.
O Ajax APIs Playground tem vários de exemplos do que pode ser feito com diferentes APIs, incluindo as do buscador, Maps, Earth, Calendar e Blogger.
A página tem três módulos: o primeiro, à esquerda, exibe os exemplos divididos em categorias; o segundo, no alto e à direita, mostra o código, e pode ser editado; e o terceiro, que ocupa a parte inferior, permite executar o código e ver o resultado. É possível salvar e exportar os dados.
Confira!
int ano = 2009; int mes = 09; int ultimoDiaDoMes = DateTime.DaysInMonth(ano,mes);
Com o lançamento do Visual Studio 2008 e do .NET Framework 3.5 a Microsoft anunciou publicamente a liberação de acesso ao código fonte para leitura durante o debug mediante concordância com os termos de licenciamento. Vale lembrar que as versões Express (gratuitas) não terão acesso a essa funcionalidade.
Para ter o acesso você precisa rodar um hotfix que vai atualizar o Visual Studio 2008 de forma a suportar os downloads dos arquivos de Symbols com as informações necessários ao debug.
As classes abaixo estão disponíveis para utilização:
Siga os procedimentos abaixo para configuração:
a) Adicione a referência para : http://referencesource.microsoft.com/symbols
b) Defina a pasta que será salvo os arquivos de debug.
c) Marque a opção: "Search the above loactions only when symbols are loaded manualy" (Download manual)
d) Você pode optar também por não marcar a opção citada na letra "c" que o Visual Studio vai fazer download automático, porém pode demorar a depender da conexão internet (+- 50 MB). (Recomendado após os primeiros testes)
a) Coloque seu break point dentro do seu código.
b) Rode o projeto.
c) Localize a janela Call Stack ou chame com o atalho: CTRL + ALT + C .
d) Selecione na janela Call Stack as referências e depois Load Symbols conforme figura 03 (download manual).
e) Durante o processo de debug o Visual Studio vai salvar os arquivos de Symbols na pasta cache.
Definida as configurações você já pode colocar em prática e avaliar por exemplo a implementação do método DataBind de um GridView. Confira nas duas figuras seguintes:
Parte 1 - Colocando Break Point no DataBind()
Parte 2 - Navegando pelo método DataBind() usando "F11"
Parte 3 - Avaliando a implementação do DataBind do GridView diretamente no código fonte.
Com esse processo os desenvolvedores mais curiosos agora podem finalmente enxergar em tempo real o que está acontecendo nas chamadas de métodos internos do .NET.
Referências:
- . NET Framework Library Source Code now available
- Configuring Visual Studio to Debug .NET Framework Source Code
Créditos: Ramon Durães - http://www.linhadecodigo.com.br/Artigo.aspx?id=1655