Immer wieder neu suchen oder speichern?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo zusammen,

ich habe eine recht allgemeine Frage, die eigentlich auch sprachen-unabhängig ist. Ich werde es aber mal an einem konkreten Beispiel festmachen:

Ich habe meinen kleinen Torrent-Client, der eine beliebige Anzahl von Torrents in einem Treeview darstellt - mit verschiedenen Informationen in diversen Spalten.

Nun werden diese Angaben sekündlich aktualisiert, wenn das Fenster angezeigt wird. Um das richtige Torrent der richten Zeile zuzuordnen, brauche ich

a) 2 verschachtelte Schleifen

Code: Alles auswählen

for torrent in torrents:
    for zeile in treeview:
        if zeile.name == torrent.name:
            zeile.information = torrent.information
            continue
b) Einen Mechanismus, der einmal alle Zeilen befüllt, deren Zuordnung speichert und dann diese direkt durch ein dict ansprechen kann:

Code: Alles auswählen

for torrent in torrents:
    if self.torrent_rows.has_key(torrent.name):
        self.torrent_rows[torrent.name].informations = torrent.information
    else:
       ## Zeile erstellen und zu dem dict hinzufügen
Nun frage ich mich immer wieder, wann welches Szenario sinnvoll ist. Bei 10 Torrents in der Liste produziert Methode (a) 55 Durchläufe, bei 100 Torrents bereits 5050 etc. Und das sekündlich.
Also in diesem Fall lieber Methode (b).

Ich dachte, ihr kennt vielleicht irgendein Programmier-Paradigma dazu. Sowas wie "die Speicherschleifen-Hypothese besagt...."

Schönen Dank und Gruß,

Daniel
lunar

Ich würde erstmal viel grundlegender beim Polling ansetzen: Wieso muss die Liste jede Sekunde einmal aktualisiert werden? Bietet die Bibliothek, die du zum Umgang mit Torrents nutzt, denn keinen Signal-Mechanismus, der Aufrufer über den geänderten Zustand von Torrents informiert?

Wenn du die Liste nicht sekündlich neu erzeugen musst, ist die Effizienz des Einfügealgorithmus ziemlich egal, da er nur einmal für jeden Torrent durchlaufen werden muss.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

hm, ok, es gibt solche "state_changed_alerts" (habe ich jetzt nicht dran gedacht).

Du meinst also allgemein, dass es egal ist und man eigentlich derartige Situationen völlig vermeiden sollte? Es geht mir eigentlich gar nicht so konkret um die Torrent-Geschichte...

Danke trotzdem für den Hinweis *g

dsn
lunar

Barabbas hat geschrieben:Du meinst also allgemein, dass es egal ist und man eigentlich derartige Situationen völlig vermeiden sollte?
Ja, intervallweises Polling ist immer ein schlechte und unelegante Lösung.
Antworten