Ik ben een applicatie aan het maken met Mono, c#, Gtk# en db4o. In die applicatie heb ik een aantal schermen waar ik wat gegevens in wil laten zien en aangezien data binding in Gtk# (nog) niet beschikbaar is doe ik dat met een Gtk.Treeview (die een soort kruising is van Treeview en Listview in de Windows wereld).
Hiervoor heb ik een TreeModel gebruikt die standaard bij Gtk# geleverd zit, namelijk de ListStore. Dit liststore vul ik op de volgende manier (in een subclass ervan):
Die list is een db4o ObjectSet, het resultaat van een query. Daar gaat het me niet om, die is snel zat. Waar het wel om gaat is dat het vullen van die ListStore veel te lang duurt, ruim een seconde voor ongeveer 600 items op een 1.5GHz Pentium-M met 512MB RAM.
Nu is het niet zo erg dat het lang duurt als het maar 1 keer zou moeten gebeuren, maar ik heb een filter textbox op dat window staan en bij elke aanslag in die textbox voer ik de query opnieuw uit en display ik het resultaat. Bij het leegmaken van de textbox (door backspace te gebruiken), zorgt dit voor zeer irritante vertragingen in de lijstopbouw en dat vind ik niet werkbaar.
Heeft iemand een idee over hoe ik dit beter kan doen? Het filteren is op zich geen requirement, maar het moet mogelijk zijn om snel iets in de lijst te vinden, waarbij er over meerdere kolommen tegelijk gezocht moet worden.
In het Win32 programma wat dit programma moet vervangen gebruik ik een virtual listview, waarbij de Listview een callback doet voor hij elk item gaat renderen. Op die manier kan ik miljoenen items in een fractie van een seconde "laden". Eigenlijk zoek ik zoiets, maar dat heb ik in Gtk# nog niet gevonden.
Hiervoor heb ik een TreeModel gebruikt die standaard bij Gtk# geleverd zit, namelijk de ListStore. Dit liststore vul ik op de volgende manier (in een subclass ervan):
C#:
1
2
3
4
5
6
7
| public void fillWith(IList list) { Clear(); foreach(Klant k in list) { AppendValues(k); } } |
Die list is een db4o ObjectSet, het resultaat van een query. Daar gaat het me niet om, die is snel zat. Waar het wel om gaat is dat het vullen van die ListStore veel te lang duurt, ruim een seconde voor ongeveer 600 items op een 1.5GHz Pentium-M met 512MB RAM.
Nu is het niet zo erg dat het lang duurt als het maar 1 keer zou moeten gebeuren, maar ik heb een filter textbox op dat window staan en bij elke aanslag in die textbox voer ik de query opnieuw uit en display ik het resultaat. Bij het leegmaken van de textbox (door backspace te gebruiken), zorgt dit voor zeer irritante vertragingen in de lijstopbouw en dat vind ik niet werkbaar.
Heeft iemand een idee over hoe ik dit beter kan doen? Het filteren is op zich geen requirement, maar het moet mogelijk zijn om snel iets in de lijst te vinden, waarbij er over meerdere kolommen tegelijk gezocht moet worden.
In het Win32 programma wat dit programma moet vervangen gebruik ik een virtual listview, waarbij de Listview een callback doet voor hij elk item gaat renderen. Op die manier kan ik miljoenen items in een fractie van een seconde "laden". Eigenlijk zoek ik zoiets, maar dat heb ik in Gtk# nog niet gevonden.
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!