Zugriffszeit Liste Array

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Zugriffszeit Liste Array

Beitrag von Olafmagne »

Hallo,

Ich habe eine Frage bezüglich der Zugriffszeit und Speicherverbrauch.
Folgende Situation:

eine definierte Anzahl an Datensätze mit einer definierten Anzahl an Daten
(als beispiel 10 sätze a 4 daten)

Die Datensätze sollen zum einfachen Zugreifen mit einer Nummer angesprochen werden(d(1..n)).
Was ist nun schneller?
LinkedList? zugriff via SelectElement(1..n)
Array? zugriff via d(1..n,1..4)

Die Daten sind immer in der gleichen Reihenfolge und werden zum Programmstart eingelesen,
der Inhalt kann, je nach Aufgabe, anders sein, die Bedeutung ist allerdings immer gleich!

Was ist nun schneller und benötigt weniger Speicherplatz?

Dank im Vorraus

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zugriffszeit Liste Array

Beitrag von NicTheQuick »

Arrays sind immer schneller und platzsparender, wenn du mit einem Index darauf zugreifen willst.
LinkedLists werden erst dann sinnvoll, wenn du häufig Daten an verschiedenen Stellen hinzufügen oder löschen musst.
Bild
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Zugriffszeit Liste Array

Beitrag von Olafmagne »

Merci

nun, die Daten sind static, so das principiell nur lesend darauf zugegriffen wird
aussnahne ist ein eventuelles einstellen
(zb wie pb-Ide die farben ...)
es sind max 10/11 Sätze, also Überschaubar

noch 'ne andere Frage:

ich möchte einige Daten zur Laufzeit sammeln und in eine Structure speichern,
die dann an anderer Stelle analysiert werden sollen.
da dies sehr oft geschehen soll, denke ich für's analysieren an einen Thread
Die daten werden in einem CallBack, der mittels winapi erstellt werden soll, gesammelt.
kann ich Mutex in einem CallBack setzen?

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Zugriffszeit Liste Array

Beitrag von mk-soft »

Du must sogar mit Mutex deine Arrays und Listen selber schützen, wenn dies aus diversen Thread bearbeitet werden.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Zugriffszeit Liste Array

Beitrag von Olafmagne »

mk-soft hat geschrieben:Du must sogar mit Mutex deine Arrays und Listen selber schützen, wenn dies aus diversen Thread bearbeitet werden.
Ja nee is klar

Frage is nur ob das in einem CallBack auch geht?
(Kein BindEvent(),sondern

Code: Alles auswählen

Procedure Callback(hWnd, uMsg, wParam, lParam)
  Protected result
  Protected *msgf.MSGFILTER
  Protected POINT.POINT
  Protected char
  Protected lineindex
  Protected colindex
  Protected col
  Protected row
  
Result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_NOTIFY
      *msgf=lParam
      Select *msgf\NMHDR\code
        Case #EN_MSGFILTER   
          Select *msgf\msg
            Case #WM_LBUTTONUP, #WM_KEYUP
              GetCaretPos_(@POINT)
              char = SendMessage_(GadgetID(1), #EM_CHARFROMPOS, 0, @POINT)
              lineindex = SendMessage_(GadgetID(1), #EM_LINEFROMCHAR, char, 0)
              colindex = SendMessage_(GadgetID(1), #EM_LINEINDEX, lineindex, 0)
              col = char-colindex
              row = lineindex ;+ 1
              Debug "(" + Str(col) + ", " + Str(row) + ")"+","+colindex
          EndSelect
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure


  evMask = SendMessage_(GadgetID(1), #EM_GETEVENTMASK, 0, 0)
  SendMessage_(GadgetID(1), #EM_SETEVENTMASK, 0, evMask | #ENM_KEYEVENTS | #ENM_MOUSEEVENTS )
  SetWindowCallback(@Callback())
Beispiel aus der "WinApi Library" von RSBasic

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Zugriffszeit Liste Array

Beitrag von mk-soft »

Die Callback läuft im MainScope. Also wo der WaitWindowEvent aufgerufen wird.
Möchtest du Daten auch im Thread auslesen, must du diese mit Mutex schützen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Zugriffszeit Liste Array

Beitrag von Olafmagne »

OK

Danke

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten