010
16.10.2003, 08:00 Uhr
Suchthaufen
|
Hallo, besten Dank für die angebotene Hilfe, es sieht nun so aus, als hätt ich den Fehler gefunden. Irgendwie dauert das suchen der Bilder und Texte für den Button in der Datenbank so lange. Ich hab zwar noch keine Lösung für das Problem aber einstweilen kommentier ich das ganze mal aus, dann kann ich auch 1000 Buttons erstellen ohne dramatischen Zeitverlust.
Also auf ein Neues: Beim Erstellen der Buttons mach ich folgendes.
C++: |
BOOL CColorButton::OnNcCreate(LPCREATESTRUCT lpCreateStruct) { LoadText(); LoadBitmaps(); if (!CButton::OnNcCreate(lpCreateStruct)) return FALSE;
// TODO: Fügen Sie Ihren spezialisierten Erstellcode hier ein.
return TRUE; }
|
die Funktionen LoadText und LoadBitmaps sehen so aus:
C++: |
void CColorButton::LoadBitmaps(void) { if(this->colorButton_->isDataBase()==false) return; // seit ich die if Abfrage eingefügt hab scheint es dramatisch schneller zu sein bitmaps_.RemoveAll(); CArray<int, int> bmp; CTools::GetPictureIds(bmp,colorButton_->GetId()); for (int i=0; i<bmp.GetCount();i++) { CDBBitmap* bm= new CDBBitmap(bmp.GetAt(i),colorButton_->GetId(), this->GetDC()); bitmaps_.Add(bm); } } void CColorButton::LoadText(void) { return;// Neu eingefügt dann wirds richtig schnell drawTexts_.RemoveAll(); CArray<int, int> tex; CTools::GetTextIds(tex,colorButton_->GetId()); for (int i=0; i<tex.GetCount();i++) { CDBDrawText* text= new CDBDrawText(tex.GetAt(i), this->GetDC(),colorButton_->GetId()); drawTexts_.Add(text); }
}
|
Meine Vermutung wär nun, das die static Funktiona aus CTools so langsam ist. Die sieht dann so aus:
C++: |
void CTools::GetTextIds(CArray<int, int>&windows,int parent) { CDaoDatabase db; CDaoRecordset rs; COleVariant dat; CString sqltx; int id; windows.RemoveAll(); db.Open(GetDatabasePath()); rs.m_pDatabase=&db; sqltx.Format("Select * from TextUnits where parentId = %d",parent); rs.Open(AFX_DAO_USE_DEFAULT_TYPE,sqltx); while (rs.IsEOF()!=TRUE) { dat=rs.GetFieldValue("ID"); id=dat.intVal; windows.Add(id);
rs.MoveNext(); } rs.Close(); db.Close(); }
|
GetPictureIDs ist praktisch identisch Vielleicht kann mir einer dazu was sagen. Sind vielleicht Staticfunktionen so erheblich langsamer? Oder mach ich die Datenbank ned richtig auf? Oder hat wer einen Designfehler entdeckt der mir soviel Zeit kostet? Besten Dank im Voraus. Dieser Post wurde am 16.10.2003 um 08:12 Uhr von Suchthaufen editiert. |