Aktuelle Zeit: 22.11.2019 17:59

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 11:37 
Offline

Registriert: 06.04.2005 22:44
Hallo Zusammen,

ich muss ein ListIconGadget mit 4 Spalten mit 37000 Einträge füllen.
Lieder ist das Sehr langsam.
Den Redraw hab ich schon ausgeschaltet.
Kennt einer eine Methode, um die Daten schneller dort reizubekommen ?
Gruß Thomas

Code:
 
       Add("Draw")
        PersonLoadState = #PersonLoadState_Idle   
        SendMessage_(GadgetID(#EingabeListIcon),#WM_SETREDRAW,0,0)
        LockMutex(Mdisplay)
        Zeile = 0
        UnlockMutex(Mdisplay)
        ClearGadgetItems(#EingabeListIcon)
        ForEach Person()
          in = Person()\Call +Chr(10) + Person()\Name+Chr(10) + Person()\DOK +Chr(10) + Person()\MailAdress
          AddGadgetItem(#EingabeListIcon,Zeile,In)           
          LockMutex(Mdisplay)
            Zeile  +1         
          UnlockMutex(Mdisplay)
        Next Person()
        SendMessage_(GadgetID(#EingabeListIcon),#WM_SETREDRAW,1,0)
        Add("Fertig")



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 11:53 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Hat es vielleicht mit deinem LockMutex und UnlockMutex in der Schleife zu tun?
Wenn ich den folgenden Code mit 37.000 Einträgen ausführe, dauert das bei mir nur circa 500 Millisekunden: http://www.rsbasic.de/aktualisierung/wi ... 3%BCgen.pb

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 14:15 
Offline

Registriert: 06.04.2005 22:44
RSBasic hat geschrieben:
Hat es vielleicht mit deinem LockMutex und UnlockMutex in der Schleife zu tun?
Wenn ich den folgenden Code mit 37.000 Einträgen ausführe, dauert das bei mir nur circa 500 Millisekunden: http://www.rsbasic.de/aktualisierung/wi ... 3%BCgen.pb


Nein Liegt es nicht dran
ich habe es auch ohne den mutex versucht, keine Änderung.
Ich habe mal das AddGadgetItem weggelassen. --> Dann rennt es schnell durch
Es liegt rein an dem AddGadgetItem

Gruß Thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 14:18 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Hast du mal meinen Code getestet? Dauert es bei dir genauso lange?

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 15:23 
Offline
Benutzeravatar

Registriert: 11.01.2009 16:30
Wohnort: Langerringen
Grundsätzlich muss man natürlich sagen, dass das ListIconGadget langsamer wird, je mehr Spalten es hat. Aber 4 Spalten ist nun auch nicht wirklich viel...

Gib uns doch mal eine Zeitangabe, wie lange es bei dir dauert.

_________________
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 15:43 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Ich habe es jetzt genauso nachgestellt wie dein Code und komme nur auf 950 Millisekunden:
Code:
EnableExplicit

Define EventID
Define a
Define StartTime
Define ElapsedTime

Structure Structure
  a.s
  b.s
  c.s
  d.s
EndStructure

Define NewList List.Structure()

For a=1 To 37000
  AddElement(List())
  List()\a = "Hallo " + Str(a)
  List()\b = "Pure " + Str(a)
  List()\c = "Basic " + Str(a)
  List()\d = "Welt " + Str(a)
Next

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1, 10, 10, 480, 380, "Spalte 1", 100, 0)
  AddGadgetColumn(1, 1, "Spalte 2", 100)
  AddGadgetColumn(1, 2, "Spalte 3", 100)
  AddGadgetColumn(1, 3, "Spalte 4", 100)
 
  SendMessage_(GadgetID(1), #WM_SETREDRAW, 0, 0)
 
  StartTime = ElapsedMilliseconds()
 
  ForEach List()
    AddGadgetItem(1, -1, List()\a + Chr(10) + List()\b + Chr(10) + List()\c + Chr(10) + List()\d, 0, 0)
  Next
 
  SendMessage_(GadgetID(1), #WM_SETREDRAW, 1, 0)
 
  ElapsedTime = ElapsedMilliseconds()-StartTime
 
  MessageRequester("", Str(ElapsedTime) + " ms.", 0)
 
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf


Wie lange dauert dein Code normalerweise? Und wie lange dauert der von mir geschriebene Code? Mit oder ohne Debugger?

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 16:03 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ich habe mit Debugger 498 ms, ohne Debugger eher so 590 ms. Lustig. :D

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 18:37 
Offline
Benutzeravatar

Registriert: 28.07.2005 12:39
0 ms :lurk:
Code:
EnableExplicit

Structure struct
  a.s
  b.s
  c.s
  d.s
EndStructure

#ARRAY_SIZE = 37000

Global Dim List.struct(#ARRAY_SIZE)

Procedure Callback(hwnd, msg, wparam, lparam)
  Protected *hdr.NMHDR
  Protected *di.NMLVDISPINFO
  Protected str.i
 
  If msg = #WM_NOTIFY
    *hdr = lparam
   
    If *hdr\code = #LVN_GETDISPINFO
      *di = lparam     
     
      Select *di\item\iSubItem
        Case 0
          str.i = @List(*di\item\iItem)\a
        Case 1
          str.i = @List(*di\item\iItem)\b
        Case 2
          str.i = @List(*di\item\iItem)\c
        Case 3
          str.i = @List(*di\item\iItem)\d
      EndSelect
     
      *di\item\pszText = str
     
      ProcedureReturn #True
    EndIf
   
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

Procedure InitArray()
  Protected a
  For a = 0 To #ARRAY_SIZE   
    List(a)\a = "Hallo " + Str(a)
    List(a)\b = "Pure " + Str(a)
    List(a)\c = "Basic " + Str(a)
    List(a)\d = "Welt " + Str(a)
  Next
EndProcedure

Procedure Main()
  Protected EventID
 
  InitArray()
 
  If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
    SetWindowCallback(@Callback(), 0)
   
    ListIconGadget(1, 10, 10, 480, 380, "Spalte 1", 100, #LVS_OWNERDATA | #PB_ListIcon_FullRowSelect)
    AddGadgetColumn(1, 1, "Spalte 2", 100)
    AddGadgetColumn(1, 2, "Spalte 3", 100)
    AddGadgetColumn(1, 3, "Spalte 4", 100)
   
    SendMessage_(GadgetID(1), #LVM_SETITEMCOUNT, #ARRAY_SIZE, 0)
   
    Repeat     
    Until WaitWindowEvent() = #PB_Event_CloseWindow
   
  EndIf
 
EndProcedure:End Main()

_________________
Suche


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 03.05.2016 18:40 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
@edel
:shock: :allright:

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIconGadget schnell mit 3700 Einträge füllen
BeitragVerfasst: 04.05.2016 00:03 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
@edel: Cool! :allright:

Könnte ich auch gut brauchen, dafür müsste es dafür allerdings eine Cross-Plattform-Möglichkeit geben. Kennt jemand eine für MacOS, die ebenfalls eine solche Beschleunigung gegenüber AddGadgetItem() bietet?

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye