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