![]() |
Performance von Indy tidimap
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:
Ich habe es mit den Indy' auch nur mit einem :
for i := 0 to min(nCount-1,30) do begin
TheImap.GetUID(ncount - i, TheUID); TheImap.UIDRetrieveFlags(TheUID, TheFlags); TheImap.uidRetrieveHeader(TheUID, TheMsg);
Delphi-Quellcode:
versucht, ist etwas schneller, aber nicht viel.
TheImap.uidRetrieveHeader(int, TheMsg);
Bei IP*Works gibt es eine Funktion:
Delphi-Quellcode:
Diese Funktion erspart die Schleife und im OnMessageInfo Event kann kann man die zurückgelieferten Einträge in der gewünschten Form darstellen.
ipwIMAP1.FetchMessageInfo();
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] |
Re: Performance von Indy tidimap
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 |
Re: Performance von Indy tidimap
Zitat:
Dann sollte man sehen warum einer so schnell und der Andere so langsam ist. lg. Astat |
Re: Performance von Indy tidimap
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: Performance von Indy tidimap
Hallo jsheyer,
Zitat:
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 ![]() 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 |
Re: Performance von Indy tidimap
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 |
Re: Performance von Indy tidimap
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:
Ändert man es in:
SendCmd (NewCmdCounter, ( IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
IMAP4FetchDataItem[fdEnvelope] + ')'), [] ); {Do not Localize}
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:
Soweit ich weiss sind die Entwickler der Indy Komponenten hier auch vertreten, oder??
SendCmd (NewCmdCounter, ( IMAP4Commands[cmdUID] + ' ' + IMAP4Commands[cmdFetch] + ' 1:* (' + {Do not Localize}
IMAP4FetchDataItem[fdEnvelope] + ')'), [IMAP4Commands[cmdFetch]] ); {Do not Localize} Gruß Jörg |
Re: Performance von Indy tidimap
Zitat:
und ich vermute, du lässt dir die avatar-bilder der user nicht anzeigen, weil dann hätte dich bei asstertor da was angeleuchtet :mrgreen: |
Re: Performance von Indy tidimap
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 |
Re: Performance von Indy tidimap
Hallo Jörg,
Zitat:
Zitat:
Zitat:
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 :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz