Seite 1 von 1

Zugriffszeit Liste Array

Verfasst: 29.03.2021 16:38
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

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 17:47
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.

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 18:40
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

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 18:50
von mk-soft
Du must sogar mit Mutex deine Arrays und Listen selber schützen, wenn dies aus diversen Thread bearbeitet werden.

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 19:14
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

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 21:38
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.

Re: Zugriffszeit Liste Array

Verfasst: 29.03.2021 21:44
von Olafmagne
OK

Danke

Olaf