<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16640" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Ahoj</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Opět se na vás obracím s některými mými problémy.
Tentokrát se jedná o takovou spíše teoretickou otázku. Již mám
naprogramovaného "relativně" fungujícího poštovního klienta (přijímání, psaní
mailů, pravidla pro zprávy, skupiny, kontakty, rss čtečka apod...). Pokud
pracuji s databází, která obsahuje 100 e-mailů, žádný problém
nenastane, ale jelikož e-maily nemažu, tak je počet e-mailů o něco
vyšší (přes 4000). A v tom je právě ten problém. Pokud mám například složku, ve
které je 500 e-mailů, tak se načítá asi 5 sekund. V jiných aplikacích (Outlook
Express je tato doba 10 kratší). A moje otázka je: Jak by se tato doba dala
zkrátit?</FONT></DIV>
<DIV><FONT face=Arial size=2>Jako knihovnu pro tvorbu Gui používám
WxPython a jako databázi, kam ukládám e-maily používám modul shelve.
E-maily ukládám následovně:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>def prijmi_email(self):</FONT></DIV>
<DIV><FONT face=Arial size=2> email =
pop.retr(x)<BR> email =
"\n".join(email[1])<BR> kategorie = 0<BR>
precteno = 0<BR> self.uloz_db(kategorie, [email,
precteno])</FONT></DIV>
<DIV><FONT face=Arial size=2>def uloz_db(self, kategorie, email):</FONT></DIV>
<DIV> s=shelve.open("Db/%s.db"%<FONT face=Arial
size=2>kategorie</FONT>)<BR> id=s["id"]<BR> s[str(id)]
= <FONT face=Arial size=2>email</FONT><BR> s["id"] = id
+1<BR> s.close()<BR> return
id</DIV>
<DIV> </DIV>
<DIV>Každý e-mail (v rámci jedné složky) má tedy svoje vlastní unikátní id.
Načítání funguje následujícím způsobem:</DIV>
<DIV> </DIV>
<DIV>def nacti_emaily(self, kategorie=0, strana =
0):<BR>
self.listbox.DeleteAllItems()<BR>
s=shelve.open("Db/%s.db"%kategorie)<BR>
rozsah= []<BR> for x in
range(strana*100, strana*100 +
100):<BR>
rozsah.append(str(x))<BR> for prvek in
s:<BR> if
prvek == "id":
continue<BR>
if prvek in
rozhrani:<BR>
self.pridej_zaznam(s[prvek][0], prvek,
precteny=s[prvek][1])<BR>
s.close()</DIV>
<DIV> </DIV>
<DIV>Aby načítání trvalo alespoň o trochu méně, rozhodl jsem zavést stránkování
(na jedné straně pouze 100 mailů), ale moc jsem si nepomohl, protže stejně musím
procházet všemi e-maily a zobrazovat pouze ty z daného rozsahu. Ve
funkci pridej_zaznam ještě musím získat odesílatele, předmět a čas přijetí, což
zabere taky relativně dost času. </DIV>
<DIV>Jak by se dal celý postup zefektivnit?</DIV>
<DIV> </DIV>
<DIV>Děkuji za každou odpověď</DIV>
<DIV> </DIV>
<DIV>Jakub Vojáček</DIV></BODY></HTML>