2 Stimmen

Auf meinem Rechner laufen die Programme in 2 Sekunden, auf anderen 15 Sekunden.

Ich habe zwei in C++ geschriebene Programme, die Winsock verwenden. Beide akzeptieren TCP-Verbindungen, wobei eines Daten sendet und das andere Daten empfängt. Sie sind in Visual Studio 2008 kompiliert. Ich habe auch ein in C# geschriebenes Programm, das eine Verbindung zu beiden C++-Programmen herstellt und die Pakete, die es von einem Programm empfängt, an das andere weiterleitet. Dabei zählt es die Anzahl der weitergeleiteten Pakete und zeigt sie an. Außerdem wird die verstrichene Zeit zwischen dem ersten und dem letzten Paket angezeigt.

Das C++-Programm, das die Pakete sendet, macht einfach 1000 Schleifen und sendet genau dieselben Daten. Wenn ich alle drei Anwendungen auf meinem Entwicklungsrechner ausführe (mit Loopback oder tatsächlicher IP), werden die Pakete in etwa 2 Sekunden durch das gesamte System geleitet. Wenn ich alle drei Anwendungen auf einem anderen PC in unserem Labor ausführe, dauert es immer zwischen 15 und 16 Sekunden. Jeder PC hat unterschiedliche Prozessoren und Speichergrößen, aber alle laufen unter Windows XP Professional. Mein Entwicklungs-PC hat sogar einen älteren AMD Athlon mit halb so viel Arbeitsspeicher wie einer der Rechner, der länger für diese Aufgabe braucht. Ich habe das Diagramm der CPU-Zeit im Task-Manager auf meinem und einem anderen Rechner beobachtet, und keiner von ihnen beansprucht einen nennenswerten Teil des Prozessors (d. h. mehr als 10 %), während diese Programme laufen.

Hat jemand eine Idee? Ich kann nur daran denken, Visual Studio auf einem Zielcomputer zu installieren, um zu sehen, ob es etwas damit zu tun hat.

Problem Solved ====================================================

Ich habe zuerst Visual Studio installiert, um zu sehen, ob das irgendeine Auswirkung hat, was nicht der Fall war. Dann habe ich die Programme auf meinem neuen Entwicklungs-PC getestet, und sie liefen genauso schnell wie auf meinem alten PC. Beim Ausführen der Programme auf einem Vista-Laptop wurden wieder 15 Sekunden erreicht.

Ich habe Zeitstempel auf beiden Seiten bestimmter Anweisungen im Serverprogramm ausgedruckt, um zu sehen, welche am längsten brauchte, und ich fand heraus, dass die Verzögerung durch einen Sleep()-Methodenaufruf von 1 Millisekunde verursacht wurde. Offensichtlich wurde auf meinen alten und neuen Systemen Sleep(1) ignoriert, denn ich hatte zwischen 10 und >20 Pakete, die in der gleichen Millisekunde gesendet wurden. Gelegentlich kam es zu einer Ausführungspause von etwa 15 oder 16 Millisekunden, was zu einer Zeit von etwa 2 Sekunden für 1000 Pakete führte. Auf den Systemen, die etwa 15 Sekunden für 1000 Pakete benötigten, hatte ich entweder eine 15- oder 16-Millisekunden-Lücke zwischen dem Senden jedes Pakets.

Ich habe den Aufruf der Sleep()-Methode auskommentiert und jetzt werden die Pakete sofort gesendet. Danke für die Hilfe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X