From fbeca0363f83a385a9f167cdd79aae6934d82639 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Fri, 29 Oct 2010 03:58:28 +0300 Subject: [PATCH] Stage2 mega-optimization --- gui/shipBrowser.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 9696f42fc..03ec0d7e2 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -3,6 +3,7 @@ import copy from gui import bitmapLoader import gui.mainFrame import service +import collections from wx.lib.buttons import GenBitmapButton from pickle import TRUE @@ -25,6 +26,10 @@ class ShipBrowser(wx.Panel): self.browseHist = [] self.lastStage = (0,0) + self.stage1Cache = collections.OrderedDict() + self.stage2Cache = collections.OrderedDict() + self.stage3Cache = collections.OrderedDict() + self._stage1Data = -1 self._stage2Data = -1 self._stage3Data = -1 @@ -119,11 +124,25 @@ class ShipBrowser(wx.Panel): sMarket = service.Market.getInstance() sFit = service.Fit.getInstance() self.lpane.RemoveAllChildren() - shipList = sMarket.getShipList(categoryID) - shipList.sort(key=self.raceNameKey) - for ID, name, race in shipList: - self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race)) + if not self.stage2Cache.has_key(categoryID): + content = [] + shipList = sMarket.getShipList(categoryID) + shipList.sort(key=self.raceNameKey) + for ID, name, race in shipList: + fits = len(sFit.getFitsWithShip(ID)) + self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race)) + content.append((ID,name,fits,race)) + self.stage2Cache[categoryID]= content + else: + count = 0 + for ID,name,fits,race in self.stage2Cache[categoryID]: + dbfits = len(sFit.getFitsWithShip(categoryID)) + if dbfits != fits: + fits = dbfits + self.stage2Cache[categoryID][count]= (ID,name,fits,race) + count += 1 + self.lpane.AddWidget(ShipItem(self.lpane,ID, (name,fits),race)) self.lpane.RefreshList() self.Show()