Build 2011

09/14/2011 22:25:00 By Felipe Pessoto

Já está acontecendo o Build(antigo PDC) 2011. Tem muita novidade vindo por aí, no Windows 8 e no .NET Framework 4.5.

Hoje a meia-noite foi liberado os ISO´s com um Preview do Windows 8, com as ferramentas de desenvolvimento, incluindo o Visual Studio 11.

O evento vai ter muitas sessões interessantes para programadores. Fiz uma lista com as que achei mais interessantes, separando por prioridade:

Top

Optimize your website using ASP.NET and IIS8 - http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-837T

Deep dive into the kernel of the .NET Framework - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-813T

What's new in .NET Framework 4.5 - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-834T

Future directions for C# and Visual Basic - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-816T

Async everywhere: creating responsive APIs & apps - http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-203T

Read more...

Organizando planos de execução gigantes

07/25/2011 08:16:00 By Felipe Pessoto

Neste post quero mostrar uma forma de organizar um plano de execução gigante.

Muitas vezes quando trabalhamos com bancos de dados antigos e complexos, acabamos lidando com problemas de performance e o plano de execução da algumas dicas por onde começar o trabalho de otimização.

O problema é quando o próprio plano de execução é grande e complexo, dificultando a leitura e tornando o simples trabalho de achar os pontos críticos em uma tarefa entediante.

O primeiro passo pra isso é salvar o plano de execução em XML. No Sql Management Studio, basta clicar com o botão direito sobre o Plano de Execução e selecionar "Save Execution Plan As". Após isso é necessário abrir o plano de execução no bloco de notas e re-salvar em Unicode, pois o XML está marcado como Unicode, mas o Management Studio salva em condificação ANSI, o que gera um problema no próximo passo.

Assim que temos o arquivo XML preparado, basta fazer alguns SELECT´s no arquivo XML, onde podemos ordenar por tempo estimado de CPU, IO ou a diferença entre o número de linhas esperados e o número atual:

DECLARE @xml XML

SELECT @xml =(SELECT * FROM OPENROWSET (BULK 'C:\Users\Usuario\Desktop\Exec.txt', SINGLE_BLOB) XMLShowPlan)

SELECT  RelOp.op.value('@NodeId', 'int') AS NodeId,
        RelOp.op.value('@PhysicalOp', 'NVARCHAR(75)') AS Operation,
        RelOp.op.value('@EstimateCPU', 'float') AS EstimatedCPU,
        RelOp.op.value('@EstimateIO', 'float') AS EstimatedIO
FROM    @xml.nodes('declare default element namespace
    "http://schemas.microsoft.com/sqlserver/2004/07/showplan";
    //RelOp') AS RelOp ( op )
ORDER BY [EstimatedCPU] DESC

SELECT  RelOp.op.value('@NodeId', 'int') AS NodeId,
        RelOp.op.value('@PhysicalOp', 'NVARCHAR(75)') AS Operation,
        RelOp.op.value('@EstimateCPU', 'float') AS EstimatedCPU,
        RelOp.op.value('@EstimateIO', 'float') AS EstimatedIO
FROM    @xml.nodes('declare default element namespace
    "http://schemas.microsoft.com/sqlserver/2004/07/showplan";
    //RelOp') AS RelOp ( op )
ORDER BY [EstimatedIO] DESC;

WITH ExPlan AS(

SELECT  RelOp.op.value('@NodeId', 'int') AS NodeId,
        RelOp.op.value('@PhysicalOp', 'NVARCHAR(75)') AS Operation,
        RelOp.op.value('@EstimateCPU', 'float') AS EstimatedCPU,
        RelOp.op.value('@EstimateIO', 'float') AS EstimatedIO,
        RelOp.op.value('@EstimateRows','float') AS EstimatedRows,
        RelOp.op.value('(./*:RunTimeInformation/*:RunTimeCountersPerThread)[1]/@ActualRows','int') AS ActualRows
FROM    @xml.nodes('declare default element namespace
    "http://schemas.microsoft.com/sqlserver/2004/07/showplan";
    //RelOp') AS RelOp ( op )
)

SELECT e.NodeId
 ,e.Operation
 ,e.EstimatedRows
 ,e.ActualRows
 ,(e.EstimatedRows/ActualRows) AS EstActualRatio
  FROM [ExPlan] e
  WHERE e.EstimatedRows > 0
  and e.ActualRows > 0
ORDER BY [EstActualRatio] ASC

Você pode criar outros selects para diversos casos, mas com isso já temos uma base.

ReSharper Tips and Tricks Video from NDC

06/23/2011 16:02:00 By Felipe Pessoto

No NDC deste ano o Hadi Hariri, ASP.NET MVP e Technical Evangelist da Jetbrains, fez uma apresentação sobre Resharper, apresentando algumas das últimas novidades da versão 5 e 6.

Pra quem ainda não usa esta ferramenta essencial pra qualquer desenvolvedor C#, deve assistir o vídeo completo ou a seleção com alguns pontos mais interessantes:

Sessão completa: http://tv.jetbrains.net/videocontent/resharper-tips-and-tricks-live-session-at-ndc-2011

Entity Framework Power Tools CTP1

05/18/2011 19:56:00 By Felipe Pessoto

O time do Entity Framework/ADO.NET acabou de lançar uma ferramenta sensional, o Entity Framework Power Tools CTP1.

Quem usa Code First sempre tem que ter um trabalhão pra mapear um banco de dados já existente, principalmente se for muito grande e com falhas de modelagem. Com essa nova ferramenta, quando você clica com o botão direito em um projeto C#, tem uma nova opção: "Entity Framework -> Reverse Engineer Code First"

Read more...