<!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>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Op&#283;t se na vás obracím s n&#283;kterými mými problémy. 
Tentokrát se jedná&nbsp;o takovou&nbsp;spíše teoretickou otázku. Již mám 
naprogramovaného "relativn&#283;" fungujícího poštovního klienta (p&#345;ijímání, psaní 
mail&#367;, pravidla pro zprávy, skupiny, kontakty, rss &#269;te&#269;ka&nbsp;apod...). Pokud 
pracuji s databází, která obsahuje 100 e-mail&#367;, žádný problém 
nenastane,&nbsp;ale jelikož e-maily nemažu,&nbsp;tak je po&#269;et e-mail&#367; o n&#283;co 
vyšší (p&#345;es 4000). A v tom je práv&#283; ten problém. Pokud mám nap&#345;íklad složku, ve 
které je 500 e-mail&#367;, tak se na&#269;í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&nbsp;a jako databázi, kam ukládám e-maily používám modul shelve. 
E-maily ukládám následovn&#283;:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>def prijmi_email(self):</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; email = 
pop.retr(x)<BR>&nbsp;&nbsp;&nbsp; email = 
"\n".join(email[1])<BR>&nbsp;&nbsp;&nbsp; kategorie = 0<BR>&nbsp;&nbsp;&nbsp; 
precteno = 0<BR>&nbsp;&nbsp;&nbsp; self.uloz_db(kategorie, [email, 
precteno])</FONT></DIV>
<DIV><FONT face=Arial size=2>def uloz_db(self, kategorie, email):</FONT></DIV>
<DIV>&nbsp;&nbsp;&nbsp; s=shelve.open("Db/%s.db"%<FONT face=Arial 
size=2>kategorie</FONT>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;id=s["id"]<BR>&nbsp;&nbsp;&nbsp;&nbsp;s[str(id)] 
= <FONT face=Arial size=2>email</FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;s["id"] = id 
+1<BR>&nbsp;&nbsp;&nbsp;&nbsp;s.close()<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 
id</DIV>
<DIV>&nbsp;</DIV>
<DIV>Každý e-mail (v rámci jedné složky) má tedy svoje vlastní unikátní id. 
Na&#269;ítání funguje následujícím zp&#367;sobem:</DIV>
<DIV>&nbsp;</DIV>
<DIV>def nacti_emaily(self, kategorie=0, strana = 
0):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
self.listbox.DeleteAllItems()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
s=shelve.open("Db/%s.db"%kategorie)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
rozsah= []<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for x in 
range(strana*100, strana*100 + 
100):<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
rozsah.append(str(x))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for prvek in 
s:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
prvek == "id": 
continue<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if prvek in 
rozhrani:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
self.pridej_zaznam(s[prvek][0], prvek, 
precteny=s[prvek][1])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
s.close()</DIV>
<DIV>&nbsp;</DIV>
<DIV>Aby na&#269;ítání trvalo alespo&#328; o trochu mén&#283;, rozhodl jsem zavést stránkování 
(na jedné stran&#283; pouze 100 mail&#367;), ale moc jsem si nepomohl, protže stejn&#283; musím 
procházet všemi e-maily a zobrazovat&nbsp;pouze ty z daného rozsahu.&nbsp;Ve 
funkci pridej_zaznam ješt&#283; musím získat odesílatele, p&#345;edm&#283;t a &#269;as p&#345;ijetí, což 
zabere taky relativn&#283; dost &#269;asu. </DIV>
<DIV>Jak by se dal celý postup zefektivnit?</DIV>
<DIV>&nbsp;</DIV>
<DIV>D&#283;kuji za každou odpov&#283;&#271;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Jakub Vojá&#269;ek</DIV></BODY></HTML>