Komponent MS Office Document Imaging 12 a wyciek pamięci

0

Witam.
W taki sposób używam komponentu do OCR:

doc := IDispatch(CreateOleObject('MODI.Document')) as IDocument;
doc.create('.\plik.bmp');
doc.OCR(miLANG_ENGLISH,true,true);
Img := IDispatch(doc.Images[0]) as IImage;
Layout := IDispatch(Img.Layout) as ILayout;
form1.Edit1.Text:=  Layout.Text;
doc.Close(false);

   finally

   end;
doc:=nil;
Img:=nil;
Layout:=nil;

end;
 

Metoda na rozpoznawanie tekstu z bitmapy działa bez problemu, ale jak uruchamiam to w wątku i pracuje cały czas to systematycznie zwiększa się zużycie pamięci. FreeAndNil nie pomaga, Free nie działa na te obiekty. Co jeszcze mogę zrobić.

Pozdrawiam

0

Próbuję w ten sposób, ale bez efektu.
doc zamieniłem na zmienną Variant oraz doc:=Unassigned;

cały problem leży tu:

doc.create(plik);
doc.OCR(miLANG_ENGLISH,true,true);

0
Var OleObj: Variant;
{...}
OleObj := CreateOleObject('MODI.Document');
doc := IDispatch(OleObj) as IDocument;
{...}
OleObj.Quit;
OleObj := Unassigned;
0

Method 'Quit' not supported by automation object.

0

Funkcja OCR działa, ale jak jest to wszystko w wątku to nie zwalnia pamięci. Program dojdzie do około 100MB i przystaje reagować.

0

U mnie ten kod z drobna różnicą bo mam nie wiadomo dlaczego błąd i zamiast:

doc.OCR(miLANG_ENGLISH,true,true); //bład OCR running error

mam:

Img.OCR(miLANG_ENGLISH,true,true);

testowany w pętli od 0 do 1000 nie powoduje żadnych wycieków pamięci (nie widać ani w menadżerze zadań ani Delphi nie raportuje)

0

doc.create('.\plik.bmp'); // przypisanie pliku do zeskanowania

doc.OCR(miLANG_ENGLISH,true,true); //funkcja skanowania tego dokumentu

Nie rozumiem dlaczego ci to działa z zapisem Img.OCR(miLANG_ENGLISH,true,true);, wg mnie nie powinno (u mnie oczywiście nie działa).
I może nie działa, dlatego pamięć nie wycieka, ponieważ ta funkcja własnie powoduje te wycieki: doc.OCR(miLANG_ENGLISH,true,true); + doc.create.

0
Img.OCR(miLANG_ENGLISH,true,true);

Działa u mnie na 100% tylko przecież odczytuje tekst z bitmapy i jak pisałem nie ma wycieków.
Czemu u ciebie nie działa to nie wiem może zrobiłeś źle bo zapomniałem napisać że powyższa linia ma być oczywiście po:

Img:= IDispatch(doc.Images[0]) as IImage;

I niby dlaczego wg. Ciebie nie powinno to działać?

0

Faktycznie, zwracam honor, działa.
Natomiast z pamięcią dalej problem, po 10 minutach pracy przyrost o ok. 5MB

0

Użyj FastMM do sprawdzenia czy masz faktycznie do czynienia z wyciekiem i czy faktycznie jest w tym miejscu. Tutaj krótki opis tego narzędzia Debugowanie

1 użytkowników online, w tym zalogowanych: 0, gości: 1