AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Performance von Indy tidimap
Thema durchsuchen
Ansicht
Themen-Optionen

Performance von Indy tidimap

Offene Frage von "jsheyer"
Ein Thema von jsheyer · begonnen am 31. Jan 2010 · letzter Beitrag vom 3. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#1

Performance von Indy tidimap

  Alt 31. Jan 2010, 20:18
Hallo,

es geht darum die Mails von einem IMAP Server verwalten zu lassen, anstatt sie doppelt auch in der lokalen Datenbank abzulegen.
Dazu habe ich z. B. die TidImap Komponente (Indy 10.) benutzt. Dazu habe ich das Bespiel Mail Programm der Indy's verwendet.
Das lesen funktionert auch, aber die Geschwindigkeit ist recht langsam, für 30 Mail Header (nur die Header) benötige ich ca. 4-5 Sekunden.
Gleichzeitig habe ich mit einem die Demo Version von IP*Works installiert und siehe da, das IP*Works Demo schafft locker 700 Mails in der gleichen Zeit.
Jetzt Frage ich mich, ist Indy wirklich so viel langsamer, oder ist es einfach ein Denkfehler von mir.

Mit Indy läuft eine Schleife:
Delphi-Quellcode:
            for i := 0 to min(nCount-1,30) do begin
                TheImap.GetUID(ncount - i, TheUID);
                TheImap.UIDRetrieveFlags(TheUID, TheFlags);
                TheImap.uidRetrieveHeader(TheUID, TheMsg);
Ich habe es mit den Indy' auch nur mit einem :
                TheImap.uidRetrieveHeader(int, TheMsg); versucht, ist etwas schneller, aber nicht viel.

Bei IP*Works gibt es eine Funktion:
ipwIMAP1.FetchMessageInfo(); Diese Funktion erspart die Schleife und im OnMessageInfo Event kann kann man die zurückgelieferten Einträge in der gewünschten Form darstellen.

Ich habe es mit Delphi 7 Architect und Delphi 2010 Enterprise getestet, das Ergebnis ist das gleiche.
Vieleicht bin ja einfach nur Betiebsbling im Moment

Gruß

Jörg

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]
Jörg Heyer
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 14:44
Ich habe jetzt auch einen Test mit den Indy Komponenten mit der Funktion RetrieveAllHeaders gemacht, was aber leider auch keine Verbessung gebracht, was eigentlich auch logisch scheint, da wohl RetrieveAllHeaders die RetrieveHeader wiederum aufruft.


Woran kann es also liegen das IP*Works so viel schneller ist? Ich habe gesehen das es auch eine Komponente für IMAP Abfragen in der Clever Internet Suite gibt.

Habt Ihr ähnlich Erfahrung im Thema Performance zwischen Indy, IP*Works und vielleicht auch anderen Komponenten?

Gruß

Jörg
Jörg Heyer
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#3

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 14:53
Zitat von jsheyer:
Ich habe jetzt auch einen Test mit den Indy Komponenten mit der Funktion RetrieveAllHeaders gemacht, was aber leider auch keine Verbessung gebracht,
Hallo jsheyer, klingt interessant. Kannst Du mal mit einem Network Monitor beide Varianten aufzeichnen.
Dann sollte man sehen warum einer so schnell und der Andere so langsam ist.

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 16:27
Also, ich habe das jetzt wie gewünscht mit einem Netzwerk Monitor mitgeschrieben, und man sieht sofort, das die Indy Komponente deutlich mehr kommuniziert, ich habe die beiden pcap Dateien von Wireshark/Ethereal einmal angehängt, ich hoffe das ist so okay.

Was die Indy Komponente betrifft war das jetzt die Version in der Schleife mit den einzelnen Retrieve Header.

Das Protokoll emthält die Daten wenn die Mails einer Mailbox (unterordner) von unserem test IMAP Server abgerufen werden, das Login ist nicht mit enthalten.

Gruß

Jörg
Angehängte Dateien
Dateityp: zip networkmonitoring_162.zip (6,1 KB, 16x aufgerufen)
Jörg Heyer
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 18:20
Hallo jsheyer,

Zitat von jsheyer:
Ich habe es mit Delphi 7 Architect und Delphi 2010 Enterprise getestet, das Ergebnis ist das gleiche.
Vieleicht bin ja einfach nur Betiebsblind im Moment
Ja, das wird es sein, denn Du vergleichst Äpfel mit Birnen

Mit ipWorks & Co ziehst Du den IMAP4 ENVELOPE, also den vom IMAP-Server bereits geparsten Kurz-Header, mit Indy ziehst Du hingegen den ganzen Header. Das das länger dauert, ist normal, gewollt und liegt nicht an Indy sondern an RFC 3501 & Co. Wenn Du mit ipWorks die vollen Header ziehst, dauert es ebenfalls so lange: Willkommen in der Welt von IMAP4

Schau Dir also mal TIdIMAP4.RetrieveAllEnvelopes() an und die zugehörige TIdMessageCollection, damit kannst Du auch mit Indy nur die ENVELOPE Header ziehen.

Gruß,
Assertor
Frederik
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 21:54
Hallo Assertor,

vielen Dank schon einmal für Deinen Hinweis, ich hatte auch schon einmal die Funktion RetrieveEnvelope versucht, die aber anscheinend auch nicht schneller war, hatte ich leider nicht gesagt.
Die RetrieveAllEnvelope werde ich jetzt als Vergleich testen, nur bei meinen ersten Versuch, kommt kein Ergebnis, hier mein Auszug aus dem Quellcode:


Delphi-Quellcode:
TheImap.SelectMailBox(MailBoxName);
AllMsg := TIdMessageCollection.Create(TIdMessageItem);
TheImap.RetrieveAllEnvelopes(Allmsg);

AllMsg.Count ergibt immer 0
TheImap.MailBox.TotalMsgs ergibt dagegen 30

Gruß

Jörg
Jörg Heyer
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 23:18
Hallo Assertor,

so, das ganze hat mir jetzt ja keine Ruhe gelassen, interessanterweise hat RetrieveAllEnvelope keine Daten zurückgeliefert, auser auf der INBOX selber, aber jede andere Mailbox kamen keine Daten, erst nachdem ich eine kleine Modifikation in der idIMAP4.pas vorgenommen habe, mir ist aufgefallen das dort ein IMAP4Commands[cmdFetch] fehlt. Sobald ich das einfüge geht es, es betrifft übrigens beide Varianten die RetrieveAllEnvelope und die UIDRetrieveAllEnvelope

In der function TIdIMAP4.RetrieveAllEnvelopes steht:

Delphi-Quellcode:
        SendCmd (NewCmdCounter, ( IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
          IMAP4FetchDataItem[fdEnvelope] + ')'), [] ); {Do not Localize}
Ändert man es in:
Delphi-Quellcode:
        SendCmd (NewCmdCounter, ( IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
          IMAP4FetchDataItem[fdEnvelope] + ')'), [IMAP4Commands[cmdFetch]] ); {Do not Localize}

dann geht es, das gleiche mit der TIdIMAP4.UIDRetrieveAllEnvelopes

Delphi-Quellcode:
        SendCmd (NewCmdCounter, ( IMAP4Commands[cmdUID] + ' ' + IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
          IMAP4FetchDataItem[fdEnvelope] + ')'), [] ); {Do not Localize}

ändern in:
Delphi-Quellcode:
        SendCmd (NewCmdCounter, ( IMAP4Commands[cmdUID] + ' ' + IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
          IMAP4FetchDataItem[fdEnvelope] + ')'), [IMAP4Commands[cmdFetch]] ); {Do not Localize}
Soweit ich weiss sind die Entwickler der Indy Komponenten hier auch vertreten, oder??

Gruß

Jörg
Jörg Heyer
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Performance von Indy tidimap

  Alt 2. Feb 2010, 23:56
Zitat von jsheyer:
Soweit ich weiss sind die Entwickler der Indy Komponenten hier auch vertreten, oder??
Schau dem Assertor doch mal gaaaaaaanz tief in die Augen ... äh, in die Signatur

und ich vermute, du lässt dir die avatar-bilder der user nicht anzeigen, weil dann hätte dich bei asstertor da was angeleuchtet
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Performance von Indy tidimap

  Alt 3. Feb 2010, 08:17
Ja,
stimmt Avatar anzeigen ist wohl per default ausgeschaltet, ich habs jetzt eingeschaltet, schääm
Danke für den Hinweis. Dann ist diese Info bei Assertor ja schon einmal definitiv richtig

Gruß

Jörg
Jörg Heyer
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#10

Re: Performance von Indy tidimap

  Alt 3. Feb 2010, 08:25
Hallo Jörg,

Zitat von jsheyer:
so, das ganze hat mir jetzt ja keine Ruhe gelassen, interessanterweise hat RetrieveAllEnvelope keine Daten zurückgeliefert, auser auf der INBOX selber, aber jede andere Mailbox kamen keine Daten, erst nachdem ich eine kleine Modifikation in der idIMAP4.pas vorgenommen habe, mir ist aufgefallen das dort ein IMAP4Commands[cmdFetch] fehlt.
Hatte gestern keine Zeit mehr selbst einen Test damit zu machen Du hast natürlich recht, das fehlte dort. Danke fürs Reporten

Zitat von jsheyer:
Soweit ich weiss sind die Entwickler der Indy Komponenten hier auch vertreten, oder??
Ja, das Gerücht hält sich hartnäckig

Zitat von jsheyer:
Dann ist diese Info bei Assertor ja schon einmal definitiv richtig
Absolut, wird kurzfristig ins Indy SVN eingecheckt Vielleicht ist das sogar schon im Quality Central / RAID gemeldet, dann kann ich das da gleich auch schließen...

Edit: Ist nun im SVN, im QC und RAID war dazu nichts offen

Freut mich, das es jetzt geht und die Performance nun auch stimmt

Gruß,
Assertor

Frederik
  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 07:48 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