Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich habe bisher zur Bufferung meiner von einer analogen Inputkarte kommenden Messdaten während des Messprozesses folgendes Prinzip verwendet (siehe angehängtes VI).
Von diesem bin ich allerdings aus zwei Gründen nicht sehr überzeugt:
1. Die CPU geht (vergl. Task-Manager) nach kurzer Zeit auf 100%
2. Die Auslagerungsdatei steigt pro Sample um ca. 12,5 Byte, obwohl bei einer Auflösung von 32 Bit nur 4 Byte nötig währen.
Jetzt frage ich mich, welche Methode geeigneter ist, die Datenpackete weniger CPU-und RAM-belastender aneinander zu heften. Außerdem verstehe ich nicht, weshalb bei diesem Verfahren soviel RAM geschluckt wird.
Für Antworten bzw. bessere Alternativen währe ich dankbar.
Warum im RAM mehr Platz verbraucht wird als nötig kann ich dir auch nicht sagen zumal SGM mit einem Float vergleichbar ist und 16Bit hat.
Mehr als 64MB würde ich auch nicht über das Schieberegister jagen, denn bei 128MB streikt es. Ein Array kann auch nur mit dem positiven Teil eines 32Bit Integers initialisiert werden und ist wohl daher auch auf 2147483647 Werte beschränkt. Jedoch konnte ich es auch nicht auf diese Größe initialisieren....
Ich würde statt dem Array eine Message Queue nehme. In diese in einer Schleife die Werte einlesen und in einer anderen Schleife die Werte verarbeiten (dazu kannst du die Queue komplett leeren). Zur Synchonisation bieten sich Semaphoren an (reader writer Problem)
Es kommt sehr drauf an was du mit den Daten machen möchtest und ob du dieses stets alle im Speicher brauchst.
Was jedoch bei dir CPU frisst ist die Anzeige ALLER Werte. Ich habe das mal auf 30000 reduziert. Was auch noch deutlich Performance raubt ist das dynamische Anfordern von Speicher, daher habe ich das Array schon initialisiert und fülle es lediglich nur noch.