Forum » Programiranje » [Delphi] Memory leak ob klicu WebService-a
[Delphi] Memory leak ob klicu WebService-a

zhigatsey ::
Živjo,
za iskanje poslovnih partnerjev sem uporabil ddv inetis spletno storitev. Ker delphijev WSDL importer ne prebavi dobro wsdl datoteke, sem importani unit ročno popravil. Ko po klicu web service-a zaprem aplikacijo, dobim poročilo o memory leakih (ReportMemoryLeaksOnShutdown := True). Uporabljam Delphi 2010. Spodaj je popravljeni importani unit in primer klica. Ali lahko kdo preveri ali tudi v novejših verzijah delphija javi memory Leake oz. ali je mogoče problem v moji kodi. Če preverim s FastMM4 ne javi nič memory leakov ob koncu izvajanja, torej samo z delphijevim "vgrajenim" memory leak detektorjem dobim leake.
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: Unknown x 1
13 - 20 bytes: Unknown x 3
61 - 68 bytes: Unknown x 1
Wsdl importer popravljena koda:
Primer klica:
za iskanje poslovnih partnerjev sem uporabil ddv inetis spletno storitev. Ker delphijev WSDL importer ne prebavi dobro wsdl datoteke, sem importani unit ročno popravil. Ko po klicu web service-a zaprem aplikacijo, dobim poročilo o memory leakih (ReportMemoryLeaksOnShutdown := True). Uporabljam Delphi 2010. Spodaj je popravljeni importani unit in primer klica. Ali lahko kdo preveri ali tudi v novejših verzijah delphija javi memory Leake oz. ali je mogoče problem v moji kodi. Če preverim s FastMM4 ne javi nič memory leakov ob koncu izvajanja, torej samo z delphijevim "vgrajenim" memory leak detektorjem dobim leake.
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: Unknown x 1
13 - 20 bytes: Unknown x 3
61 - 68 bytes: Unknown x 1
Wsdl importer popravljena koda:
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : http://ddv.inetis.com/Iskalnik.asmx?wsdl
// >Import : http://ddv.inetis.com/Iskalnik.asmx?wsdl>0
// >Import : http://ddv.inetis.com/Iskalnik.asmx?wsdl>1
// Encoding : utf-8
// Version : 1.0
// (11.9.2009 8:45:59 - - $Rev: 16699 $)
// ************************************************************************ //
unit libDDVInetis;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
const
IS_OPTN = $0001;
IS_UNBD = $0002;
IS_NLBL = $0004;
IS_REF = $0080;
type
// ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Borland types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"[Gbl]
TxmlTransakcijskiRacun = class(TRemotable)
private
FxmlTRR: String;
FxmlVrstaRacuna: string;
FxmlZaprt: Boolean;
FxmlDatumZaprtja: TXSDateTime;
FxmlDatumZadnjeSpremembe: TXSDateTime;
FxmlImeBanke: String;
FxmlDatumOdprtja: TXSDateTime;
public
destructor Destroy; override;
published
property xmlTRR: String read FxmlTRR write FxmlTRR;
property xmlVrstaRacuna: string read FxmlVrstaRacuna write FxmlVrstaRacuna;
property xmlImeBanke: String read FxmlImeBanke write FxmlImeBanke;
property xmlDatumOdprtja: TXSDateTime read FxmlDatumOdprtja write FxmlDatumOdprtja;
property xmlDatumZadnjeSpremembe: TXSDateTime read FxmlDatumZadnjeSpremembe write FxmlDatumZadnjeSpremembe;
property xmlZaprt: Boolean read FxmlZaprt write FxmlZaprt;
property xmlDatumZaprtja: TXSDateTime read FxmlDatumZaprtja write FxmlDatumZaprtja;
end;
TArrayOfTxmlTransakcijskiRacun = array of TxmlTransakcijskiRacun;
TXmlZavezanec = class(TRemotable)
private
FxmlDavcnaStevilka: String;
FxmlMaticnaStevilka: String;
FxmlNaslov: String;
FxmlStatus: string;
FxmlNaziv: String;
FxmlZavezanecZaDDV: Boolean;
FxmlPlacnikDDV: Boolean;
FxmlDatumRegistracije: TXSDateTime;
FxmlDejavnost: String;
FxmlUrad: String;
FTxmlTransakcijskiRacun: TArrayOfTxmlTransakcijskiRacun;
public
destructor Destroy; override;
published
property xmlDavcnaStevilka: String read FxmlDavcnaStevilka write FxmlDavcnaStevilka;
property xmlMaticnaStevilka: String read FxmlMaticnaStevilka write FxmlMaticnaStevilka;
property xmlStatus: string read FxmlStatus write FxmlStatus;
property xmlNaziv: String read FxmlNaziv write FxmlNaziv;
property xmlNaslov: String read FxmlNaslov write FxmlNaslov;
property xmlZavezanecZaDDV: Boolean read FxmlZavezanecZaDDV write FxmlZavezanecZaDDV;
property xmlPlacnikDDV: Boolean read FxmlPlacnikDDV write FxmlPlacnikDDV;
property xmlDatumRegistracije: TXSDateTime read FxmlDatumRegistracije write FxmlDatumRegistracije;
property xmlDejavnost: String read FxmlDejavnost write FxmlDejavnost;
property xmlUrad: String read FxmlUrad write FxmlUrad;
property xmlTransakcijskiRacuni: TArrayOfTxmlTransakcijskiRacun read FTxmlTransakcijskiRacun write FTxmlTransakcijskiRacun;
end;
TArrayOfTxmlZavezanec = array of TxmlZavezanec;
// ************************************************************************ //
// Namespace : http://ddv.inetis.com/
// soapAction: http://ddv.inetis.com/Isci
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// binding : IskalnikSoap
// service : Iskalnik
// port : IskalnikSoap
// URL : http://ddv.inetis.com/Iskalnik.asmx
// ************************************************************************ //
IskalnikSoap = interface(IInvokable)
['{F1C4A65E-6E4B-E029-0CE4-7BF71E71C4FF}']
function Isci(const iskalni_niz: string): TArrayOfTxmlZavezanec; stdcall;
end;
function GetIskalnikSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IskalnikSoap;
implementation
uses SysUtils;
// TXmlZavezanec
destructor TXmlZavezanec.Destroy;
var
I: Integer;
begin
FreeAndNil(FxmlDatumRegistracije);
for I := 0 to System.Length(FTxmlTransakcijskiRacun)-1 do
SysUtils.FreeAndNil(FTxmlTransakcijskiRacun[I]);
System.SetLength(FTxmlTransakcijskiRacun, 0);
inherited Destroy;
end;
// TXmlTransakcijskiRacun
destructor TXmlTransakcijskiRacun.Destroy;
begin
FreeAndNil(FxmlDatumZaprtja);
FreeAndNil(FxmlDatumZadnjeSpremembe);
FreeAndNil(FxmlDatumOdprtja);
inherited Destroy;
end;
function GetIskalnikSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IskalnikSoap;
const
defWSDL = 'http://ddv.inetis.com/Iskalnik.asmx?wsdl';
defURL = 'http://ddv.inetis.com/Iskalnik.asmx';
defSvc = 'Iskalnik';
defPrt = 'IskalnikSoap';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IskalnikSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(IskalnikSoap), 'http://ddv.inetis.com/', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IskalnikSoap), 'http://ddv.inetis.com/Isci');
InvRegistry.RegisterInvokeOptions(TypeInfo(IskalnikSoap), ioDocument);
RemClassRegistry.RegisterXSInfo(TypeInfo(TXmlZavezanec), 'http://ddv.inetis.com/', 'xmlZavezanec');
RemClassRegistry.RegisterXSInfo(TypeInfo(TXmlTransakcijskiRacun), 'http://ddv.inetis.com/', 'xmlTransakcijskiRacun');
end.
Primer klica:
procedure ClearZavezanci(Zavezanci: libDDVInetis.TArrayOfTxmlZavezanec);
var
iZavezanec: Integer;
begin
for iZavezanec := 0 to Length(Zavezanci) - 1 do
TXMLZavezanec(Zavezanci[iZavezanec]).Free;
SetLength(Zavezanci, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Zavezanci: libDDVInetis.TArrayOfTxmlZavezanec;
Iskalnik: libDDVInetis.IskalnikSoap;
begin
Iskalnik := libDDVInetis.GetIskalnikSoap;
Zavezanci := Iskalnik.Isci('Mercator');
ClearZavezanci(Zavezanci);
end;
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Davčne blagajne (strani: 1 2 3 4 … 24 25 26 27 )Oddelek: Programiranje | 342603 (82606) | Macketina |
» | Podatki o slovenskih podjetjihOddelek: Pomoč in nasveti | 1425 (1272) | PaX_MaN |
» | Odprtje s.p.Oddelek: Loža | 8685 (7088) | next3steps |
» | Davčna in matična številka podjetjaOddelek: Informacijska varnost | 4408 (4077) | Miha 333 |
» | [Java]kompailiranje iz cmdOddelek: Programiranje | 1383 (1107) | ragezor |