AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Word Zugriff per Ole -- zunehmend langsamer
Thema durchsuchen
Ansicht
Themen-Optionen

Word Zugriff per Ole -- zunehmend langsamer

Ein Thema von stifflersmom · begonnen am 24. Apr 2007 · letzter Beitrag vom 25. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Word Zugriff per Ole -- zunehmend langsamer

  Alt 24. Apr 2007, 18:24
Hallo,

ich habe mir gerade als aktuelles projekt vorgenommen,
eine lokale Datenbank zu erstellen, die sämtliche in einem
(natürlich auch mehrere) Worddokument vorkommenen Wörter aufnimmt,
damit man anschließend über eine Wortsuche schneller die betreffenden
Dokumente aufgelistet bekommt, als es z.B. die bordeigene Suche von
Windows schafft.
Nun aber zu meinem "Problem":
Ich verbinde mich mit einem Worddokument und gehe dann alle
Wörter in dem Dokument durch um diese dann später mal zu verarbeiten,
allerdings ist es so, dass die Verarbeitungsgeschwindigkeit der
Wörter zunehemnd abnimmt, je weiter sich die Routine dem Dokumentende
nähert.
Hier mal mein bisheriger "Versuchscode":
Delphi-Quellcode:
procedure TForm1.bt_OpenWordDocClick(Sender: TObject);
Var
V :OleVariant;
Docs, ItemIndex: OleVariant;
ConFirmConversions,
OpenReadOnly :OleVariant;
LinesCount : Integer;
Zl : TStringList;

begin
If OpenDialog1.execute Then
 Begin
 Screen.Cursor := crHourGlass;
 Zl := TStringList.Create;
 
 If CheckBox2.Checked Then
 Zl.Sorted := True;
 
 If Not CheckBox1.Checked Then
 Zl.Duplicates := dupIgnore;
 
 Memo1.Lines.Clear;
 EditDocFile.Text := OpenDialog1.FileName;
 ProgressBar1.Visible:= True;
 
  try
    ItemIndex := 1;
    try
      Wordapplication.Visible := False;
      Wordapplication.Connect;
    except
      MessageDlg('Word ist nicht auf diesem Rechner installiert', mtError, [mbOk], 0);
      Abort;
    end;

      Docs := (EditDocFile.Text);
      ConFirmConversions:= False;
      OpenReadOnly := True;

      WordApplication.Documents.Open(Docs,ConFirmConversions,OpenReadOnly,EmptyParam,
      EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
      EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

      WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
      ProgressBar1.Max := WordDocument.Words.Count;

    // Alle Wörter durchgehen
    For LinesCount := 1 To WordDocument.Words.Count Do
     Begin
     ProgressBar1.Position := LinesCount;
     V:=WordDocument.Words.Item(LinesCount).Text;
     V:= trim(V);
     If Length(V) > 1 Then
     Zl.Add(V);
     End;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
      WordApplication.Disconnect;
    end;
    
  end;
   ProgressBar1.Visible := False;
// WordApplication.Disconnect;
   Memo1.Lines.Assign(Zl);
   Zl.Free;
   Screen.Cursor:= crDefault;
 end;
end;
Jetzt also die Gretchenfrage, ist mein Vorhaben so überhaupt sinnvoll realisierbar,
oder ist der Zugriff per Ole 'n schlechter Ansatz?
Ich bin für alle Vorschläge offen.

Moin
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 24. Apr 2007, 21:14
Wie viel Worde sind denn Aufgenommen?
Ich tipp viel mehr darauf das die Option dupIgnore die Stringlist bei >> 1000 Einträgen sehr langsam macht. AFAIK ist da nicht gerade der schnellste Algorithmus implementiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#3

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 24. Apr 2007, 21:31
Wenns eine Stringliste sein muss - THashedStringList aus der unit IniFiles dürfte etwas zügiger funktionieren. Allerdings ist eine Stringlist an sich keine besonders performante Lösung... denk vielleicht alternativ mal lieber über einen Baum nach.
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 07:57
Zitat von Bernhard Geyer:
Wie viel Worde sind denn Aufgenommen?
Ich tipp viel mehr darauf das die Option dupIgnore die Stringlist bei >> 1000 Einträgen sehr langsam macht.
Nö, ob mit oder ohne, das ist spürbar kein Unterschied

Zitat von Bernhard Geyer:
AFAIK ist da nicht gerade der schnellste Algorithmus implementiert.
Wie gesagt, ich bin für alle Hinweise offen, (wink mit dem Zaunpfahl)

Moin
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 07:59
Zitat von CCRDude:
Wenns eine Stringliste sein muss - THashedStringList aus der unit IniFiles dürfte etwas zügiger funktionieren. Allerdings ist eine Stringlist an sich keine besonders performante Lösung... denk vielleicht alternativ mal lieber über einen Baum nach.
Stringlist war erst mal nur der erste Versuchsansatz, die übernommenen Wörter irgendwo hinzuschieben, obwohl die Option mit den Duplikaten schon recht bequem ist.
Hmmm, Baum, da bin ich leicht überfordert, hättest Du mal einen Ansatz bzw. ein wenig Code für mich?

Moin
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 08:19
Hallo,
wenn mich meine Erinnerung nicht täuscht werden hier min 1 oder 2 Interfaces (bei jedem Aufruf innerhalb
der Schleife) angefordert.
WordDocument.Words.Item(LinesCount).Text; Versuch mal das Interface auf WordDocument.Words oder wenn es geht auf WordDocument.Words.Item vor
dem Aufruf der Schleife zu holen. So dass innerhalb der Schleife nur noch
Delphi-Quellcode:
    For LinesCount := 1 To WordDocument.Words.Count Do
     Begin
     ProgressBar1.Position := LinesCount;
     V:=Item(LinesCount).Text;
steht


Vor einigen Jahren habe ich malen gelesen, dass das wiederholte Anfordern von Interfaces Resourcen verbraucht.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 09:13
Hmmm, finde ich nicht wirklich performanter
Delphi-Quellcode:
    // Alle Wörter durchgehen
    MyWords := WordDocument.Words;
    For LinesCount := 1 To MyWords.Count Do
     Begin
     ProgressBar1.Position := LinesCount;
     V:=MyWords.Item(LinesCount).Text;
     V:= trim(V);
     If Length(V) > 1 Then
     Zl.Add(V);
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 09:20
Kannst du ein paar € ausgeben? Falls ja: Mit AutomatedQA hätte man das Problem in 1-2 Minuten gefunden indem man einfach ein Line-Profiling auf diese Funktion durchführt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 12:06
Ich lade gerade mal eine Trial-Version herunter, vielleicht kann ich mit der ja genaueres erfahren.

Moin
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
380 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Word Zugriff per Ole -- zunehmend langsamer

  Alt 25. Apr 2007, 12:07
Zitat von CCRDude:
Wenns eine Stringliste sein muss - THashedStringList aus der unit IniFiles dürfte etwas zügiger funktionieren. Allerdings ist eine Stringlist an sich keine besonders performante Lösung... denk vielleicht alternativ mal lieber über einen Baum nach.
Nö, bringt (leider) nicht wirklich was.
Ich weis auch momentan noch nicht, ob nicht die Übergabegeschwindigkeit von Word der wahre Pferdefuß ist.

Moin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz