Translate

Mostrando postagens com marcador Delphi. Mostrar todas as postagens
Mostrando postagens com marcador Delphi. Mostrar todas as postagens

quarta-feira, 13 de fevereiro de 2008

Delphi + GExpert: Open File (Ctrl+F12)

Em determinadas empresas de desenvolvimento de software onde não há um padrão para nomenclatura de units e cada programador segue o que acha melhor, você pode encontrar algo do tipo para um simples cadastro de cliente: uCliente, Cliente, uCadCli, CadCli, uCliCad, CliCad, uClienteCad ClienteCad, uCadCliente ou CadCliente.

Quando surge a necessidade de abri esse cadastro de cliente através do View Unit do Delphi (Ctrl+F12) a dificuldade é enorme, já que a pesquisa não é inteligente.


Uma sugestão para minimizar essa dificuldade é utilizar o Open File do GExert que é mais rápido, oferece pesquisa inteligente, caminho do arquivo além de outros recursos.
Para substituir o View Unit pelo Open File, basta clicar no menu GExpert na IDE e em seguida em Configuration...

Marcar a opção Open File, definir a tecla de atalho pressionando Ctrl + F12 e em seguida clicar no botão Configure

Na tela de configuração, clique na aba Settigns e marque as opções:
  • View Units - Delphi Units;
  • View Forms -Delphi Forms;
  • Open Projet - Delphi Project;
Para usar o Open File do GExpert, abra um projeto e pressione Ctrl+F12, compare a diferença!

sábado, 9 de fevereiro de 2008

Pesquisa CodeGear Delphi 2008

Essa semana o Erick Sasse postou em seu blog uma pesquisa na qual a CodeGear está realizando com objetivo de direcionar recursos para o futuro de seus produtos.

Algumas das questões foram comparativos entre:
  • Aplicação de .Net ou Win32;
  • Edição do Delphi;
  • Versão de Sistema Operacional;
  • .Net ou Win32;
  • Etc...
Distribuídas nas seguintes categorias:
  • Geral;
  • Plataformas;
  • Recursos;
  • Tipos de Desenvolvimento;
  • Banco de Dados;
  • Ambiente de Desenvolvimento;
  • Documentação;
  • Empresa;
  • Etc...
Vale a pena investir um tempo nisso pra que utiliza Delphi como ferramenta de trabalho ou diversão :)

quarta-feira, 2 de janeiro de 2008

Identificação de Memory Leaks com FastMM

O Vazamento de Memória (Memory Leak) acontece quando o programador precisa alocar memória para execução de uma determinada rotina e não libera, isso caracteriza falha e pode comprometer o funcionamento da aplicação, então cabe a nós identificar e corrigir.

Uma forma de reduzir os vazamentos é utilizar um gerenciador de memória durante toda fase de desenvolvimento. A partir do Delphi 2006, o gerenciador padrão vem sendo o FastMM onde pode ser baixado no sourceforge.net, inclusive com código-fonte (versão 4.78 de 416kb).

Como utilizar o FastMM?
  • Descompacte o FastMM em c:\dev\FastMM;
  • Crie um novo projeto Win32, salvando em c:\dev\TesteML;
  • Na Unit1 do projeto, será necessário ativar o relatório no qual informará se houve ou não vazamento em nossa aplicação. Esse relatório será mostrado após o termino da aplicação laçada pela IDE do Delphi (F9), veja o código abaixo:
initialization
  ReportMemoryLeaksOnShutdown := DebugHook <> 0;
  • No evendo OnCreate do Form1, crie duas StringList e em seguida execute a aplicação, veja o código abaixo:
procedure TForm1.FormCreate(Sender: TObject);
var
  SL1, SL2: TStringList;
begin
  SL1 := TStringList.Create;
  SL2 := TStringList.Create;
  SL1.Add('Teste com FastMM na StringList SL1');
  SL2.Add('Teste com FastMM na StringList SL2');
end;


Após finalização do aplicativo, uma mensagem é exibida informando os vazamentos ocorridos: 2 objetos do tipo TStringList (TStringList x 2). Até esse ponto, estamos usando as configurações padrão do FastMM do Delphi 2006 e 2007.

Identificação dos Memory Leaks:
  • No Delphi, clique em Projet-> Options ou (Shift+Ctrl+F11):
  • Em Directories/Conditionals informe o caminho: ..\FastMM;
  • Em Directories/Conditionals informe a Conditional Defines: EnableMemoryLeakReporting;
  • Copie o arquivo FastMM_FullDebugMode.dll localizado em C:\dev\FastMM\FullDebugMode DLL\Precompiled para a pasta C:\dev\TestML onde está o executável;
  • Abra o arquivo FastMM4Options.ini que está na pasta C:\dev\FastMM\ e faça suas configurações, nele você poderá fazer diversas combinações, é auto-explicativo, basta incluir/excluir o ponto final (".") para habilitar ou desabilitar as diretivas de compilação. As mais significantes são: FullDebugMode e ClearLogFileOnStartup;
  • Execute a aplicação e aguarde a nova mensagem como essa abaixo:

Na pasta do projeto, abra o arquivo de log gerado pelo FastMM chamado: Project1_MemoryManager_EventLog.txt

--------------------------------2008/1/3 0:41:23--------------------------------
A memory block has been leaked. The size is: 52

Stack trace of when this block was allocated (return addresses):
404AF0 [FastMM4Messages.pas][System][System.@LStrAsg][138]
419EDB [Classes][Classes.TStringList.InsertItem]
44E13B [Forms][Forms.TCustomForm.DoCreate]
44DD93 [Forms][Forms.TCustomForm.AfterConstruction]
403FF8 [FastMM4Messages.pas][System][System.@AfterConstruction][138]

The block is currently used for an object of class: Unknown

The allocation number is: 314

Current memory dump of 256 bytes starting at pointer address 1399600:
01 00 00 00 22 00 00 00 54 65 73 74 65 20 63 6F 6D 20 46 61 73 74 4D 4D 20 6E 61 20 53 74 72 69
6E 67 4C 69 73 74 20 53 4C 32 00 00 CD 39 31 FC 80 80 80 80 80 80 80 80 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
. . . . " . . . T e s t e c o m F a s t M M n a S t r i n g L i s t S L 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
--------------------------------2008/1/3 0:41:23--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

29 - 36 bytes: Unknown x 2
37 - 52 bytes: String x 2
53 - 68 bytes: TStringList x 2

Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".

Com o log gerado pelo FastMM, é possível identificar os vazamentos através do seu conteúdo, porém nem sempre é possível acabar com eles devido alguns serem gerados por componentes de terceiros e quando isso ocorrer, vale a pena escrever comunicar e passar a dica adiante.

Ah, para corrigir esse projeto de exemplo, uma forma é a seguinte:
procedure TForm1.FormCreate(Sender: TObject);
var
  SL1, SL2: TStringList;
begin
  SL1 := nil;
  SL2 := nil;
  try
    SL1 := TStringList.Create;
    SL2 := TStringList.Create;
    SL1.Add('Teste com FastMM na StringList SL1');
    SL2.Add('Teste com FastMM na StringList SL2');
  finally
    SL1.Free;
    SL2.Free; 
  end;
end;


segunda-feira, 31 de dezembro de 2007

Delphi 2007: DBX4 (antigo DBExpress) e Firebird.

Até o Delphi 2006 era possível acessar o banco de dados Firebird através do driver padrão do Interbase, no qual faz parte do pacote DBExpress, sendo assim totalmente compatível.

Já com o Delphi 2007 a historia é diferente! A CodeGear reescreveu o DBExpress dando origem ao DBX4, no qual seu driver para Interbase tornou-se incompatível com o Firebird, para mais informação leia aqui.

Importante:
Se você está pensando em migrar sua aplicação para Delphi 2007 saiba que terá que utilizar um driver de terceito para acessar o Firebird. Acompanhando as listas, o pessoal vem comentando desses: Core Lab e Zeos.

A quase boa da vez:
A CodeGear irá desenvolver um driver especifico para Firebird, porém não tem previsão de quando isso ficará pronto.

Atualização:
Cesar Romero também escreveu sobre DBX4