Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Speicherproblem bei Sniffer (https://www.delphipraxis.net/72585-speicherproblem-bei-sniffer.html)

Surrounder 3. Jul 2006 13:50


Speicherproblem bei Sniffer
 
Hallo Forum,

ich hab eine Anwendung die mit einer Hardware über Ethernet kommuniziert. Das sind ca. 50 Telegramme pro Sekunde. Da ich darin ein spezielles Protokoll verwenden muss und es mir mühe macht Fehler zu suchen habe ich mir einen Sniffer geschrieben, der die Daten in den Ethernetpacketen aufschlüsselt und mir als Kurven in einem TChart als Kurven darstellt.

Jetzt hatte ich das so gemacht, dass ich ein Event bekomme jedesmal wenn ein Packet kommt ( das Event ist von der Snoop komponente die das mitsniffern erlaubt ). Die Daten dann in ein array kopiert und selbst einen PostMessage ausgelöst um die Daten dann in einer anderen Routine zu verarbeiten und zu zeichnen. Problem ist jetzt dass ich zu langsam bin im zeichnen der Daten. Ich brauche zu lange und die Events stapeln sich so dass ich irgend wann einen EStackOverflow bekomme. Besonders wenn Windows entscheidet im Hintergrund irgend was anderes zu tun.

Jetzt bin ich heute schon den ganzen Tag am suchen und testen um die Daten z.B in eine kbMemTable zu schreiben, und abgeoppelt vom Empfangen diese dann zu verarbeiten. Aber das ist immer noch zu langsam.

Hat jemand eine Idee wie man so etwas hinbekomme kann? Mich würde auch interessieren, wenn ich jetzt was anderes verwende z.B. eine StringList liegt die dann im Speicher und lässt den Stack in Ruhe?

Stack vergößern will ich eigentlich nicht, denn das verzögert das Problem nur. Am Prinzip der Kommunikation kann ich auch nix ändern.

Danke für jeden Vorschlag

supermuckl 3. Jul 2006 15:06

Re: Speicherproblem bei Sniffer
 
Musst du die Daten in Echtzeit visualisieren ?
Wenn nicht, dann Speichere sie zwischen und zeige sie erst am Ende deiner Session an (Chart füllen).

Surrounder 3. Jul 2006 15:46

Re: Speicherproblem bei Sniffer
 
wenn möglich wäre mir nachezu Echtzeit am liebsten, denn ich muss damit Fehler an einer Anlage suchen, und dann sollte ich eventuell das Ding auch mal eine Stunden oder länger mitlaufen lassen.

Ich habs momentan jetzt mit einer Queue von den Systools gemacht. Damit klappt es schon ziemlich gut, denn ich kann dann auch den Speicher gleich wieder frei geben nachdem ich gezeichnet habe. Ich hab auch den TChart noch optimiert so wie es in der TChart hilfe stand. Aber toll ist es immer noch nicht.

Bin immer noch offen für Ideen.

Vor allem die Entkopplung zwischen Event Empfangen und zeichnen ist denke ich noch das Problem. Ich hab eben einen Timer der alle 10ms zuschlägt und die angekommenen Daten aus der Queue holt und zeichnet. Das hat mit dem PostMessage schon weniger Performance gekostet und war nicht so ruckelig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz