Hallo zusammen,
Ich habe auch mal wieder eine Frage. Vor einiger Zeit musste ich ein Projekt von D2007 auf XE hochziehen.
Darin wird ein
ActiveX eines Fremdherstellers benutzt welcher einen Algorithmus zur Bildanalyse anbietet.
Nach dem portieren haben wir bemerkt dass das Memory kontinuierlich steigt. Nach Tagen wurde der Fehler eingekreist.
Das Leak tritt an einer Funktion auf welche laut Dokumentation so beschrieben ist:
Code:
[Visual Basic] Function LoadFromMem(ByVal buffer As Variant, ByVal pixelformat As enumFormat) As Long
[Delphi] function LoadFromMem(buffer: Variant; pixelformat : TOleEnum) : Integer;
[C++] long LoadFromMem(VARIANT buffer, enumFormat pixelformat);
Der Wrapper nach dem Import in Delphi macht folgendes draus:
function LoadFromMem(buffer: OleVariant; pixelformat: enumFormat): Integer; dispid 54;
Eine ganz vereinfachte Funktion in Testprogramm sieht nun so aus:
Delphi-Quellcode:
procedure TForm1.LoadStreamToGxImage(AStream: TMemoryStream);
var
Buf: Array of Byte;
begin
Try
SetLength(Buf,AStream.Size);
AStream.Read(Buf[0],AStream.Size);
gxImage.LoadFromMem(Buf, GX_JPEG); // dies ist der Aufruf an die Schnittstelle
Finally
SetLength(Buf,0);
End;
end;
Funktioniert alles ganz wunderbar mit Delphi 2007. Mit Delphi XE2 steigt das Memory im Verhältnis zur Streamsize.
Hat irgendein netter Mensch irgendeine Idee weshalb X2 den Speicher nicht freigibt - D2007 aber schon?
Oder muss ich da noch irgendwo eine Compilereinstellung beachten/setzen?
Vielen Dank für Eure Mühe
Werner
Edit:
Mittlerweile habe ich noch "kurz" die XE5 Trial heruntergeladen und installiert.
Es ist das identische Verhalten zu beobachten. Ich bin wirklich! sehr froh falls jemand eine Idee hat.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.