AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Programm bei laufender IDE schneller - Warum?
Thema durchsuchen
Ansicht
Themen-Optionen

Programm bei laufender IDE schneller - Warum?

Ein Thema von BigAl · begonnen am 6. Sep 2008 · letzter Beitrag vom 7. Sep 2008
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

Programm bei laufender IDE schneller - Warum?

  Alt 6. Sep 2008, 22:33
Hallo zusammen,

folgendes Phänomen:

Ich habe ein Programm das einige Threads startet. Da die Threads permanent zyklisch laufen habe ich einen Durchlaufzähler sowie eine Funktion zur Berechnung der Zyklen pro Sekunde erstellt. Soweit so gut. Starte ich das Programm bei aktivierter IDE, so hat beispielsweise Thread A eine Geschwindigkeit von etwa 40 Zyklen pro Sekunde (mit Sleep künstich gebremst). Es spielt dabei keine Rolle, ob das Programm aus der IDE oder direkt die EXE gestartet wird. Irgendwie scheint die Thread permanent die Existenz der IDE abzufragen...

Hat jemand ähnliche Phänomene festgestellt? Ich habe schon alle möglichen Einstellungen getestet... Ohne Erfolg. Ach ja, der Code, welcher in der Thread abgearbeitet wird mach eigentlich nur irgendwelche internen Zuweisungen und Berechnungen. Es wird keinerlei Hardware angesprochen oder auf sonstige RTL-Funktionen zugegriffe...

Bin für jeden Tip dankbar



Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#2

Re: Programm bei laufender IDE schneller - Warum?

  Alt 6. Sep 2008, 22:55
Nochmal ich... Habe zum Test mal schnell ein kleines Programm "hingesaut". Solange die IDE auf dem Rechner läuft macht die Thread knapp 100 Zyklen / Sekunde. Ist die IDE nicht gestartet, so kommt die Thread gerade mal auf ca. 63 Zyklen / Sekunde.

Der Quellcode:

Code:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    lblCount: TLabel;
    Label3: TLabel;
    lblCountsPerSec: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    OldCount: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TTestThread = class(TThread)
  private
    procedure Execute; override;
  public
    Count: Integer;
  end;

var
  TT: TTestThread;

procedure TTestThread.Execute;
begin
  while not Terminated do
  begin
    Sleep(10);
    Inc(Count);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TT := TTestThread.Create(False);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TT.Terminate;
  TT.WaitFor;
  TT.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  lblCount.Caption := IntToStr(TT.Count);
  lblCountsPerSec.Caption := IntToStr(TT.Count - OldCount);
  OldCount := TT.Count;
end;

end.
Und das Formular:
Code:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 148
  ClientWidth = 376
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 24
    Top = 24
    Width = 43
    Height = 13
    Caption = 'Counter:'
  end
  object lblCount: TLabel
    Left = 112
    Top = 24
    Width = 39
    Height = 13
    Caption = 'lblCount'
  end
  object Label3: TLabel
    Left = 24
    Top = 48
    Width = 77
    Height = 13
    Caption = 'Counts/Second:'
  end
  object lblCountsPerSec: TLabel
    Left = 112
    Top = 48
    Width = 77
    Height = 13
    Caption = 'lblCountsPerSec'
  end
  object Timer1: TTimer
    OnTimer = Timer1Timer
    Left = 276
    Top = 92
  end
end
Ich bin ratlos...

Hat wer 'ne Idee???

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Programm bei laufender IDE schneller - Warum?

  Alt 6. Sep 2008, 23:56
Ich habe das Problem nicht. Beide Versionen kommen bei mir auf 93/sec
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Programm bei laufender IDE schneller - Warum?

  Alt 7. Sep 2008, 09:26
Du hast Windows, das ist der Grund. Windows ist kein Echtzeitbetriebssystem und niemand bei MS garantiert dir das der Scheduler von Windows dir bei einem vorhandenen 10 ms Sleep eines Threads der Thread trotzdem 100 mal dran kommt. Wenn bei dir so große unterschiede vorhanden sind würde ich mal die Liste der permanent laufenden Prozesse untersuchen. Virenscanner sind teilweise schlecht programmiert so das sie komischte Effekte produzieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#5

Re: Programm bei laufender IDE schneller - Warum?

  Alt 7. Sep 2008, 14:08
Ich habe das Ganze jetzt auf verschiedenen Maschinen ausprobiert. Auf VISTA-Rechnern habe ich immer exakt 100,0 Zyklen pro Sekunde. Auf meinem Notobook mit Windows XP zeigt sich der oben beschrieben Effekt.

Das mit dem Viren Scanner und sonstigen Background Tasks schließe ich aus, da diese ja nach dem Start der IDE auch am laufen sind. Mit IDE sollte ja die Leistung eher schlechter werden... ???

Gruß
Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Programm bei laufender IDE schneller - Warum?

  Alt 7. Sep 2008, 16:22
Hallo,

besitzt Du einen Mehrkern-Prozessor? Dann kann es sein, dass Windows durch die Zusatzbelsatung die Tasks nicht zwischen den Kernen verschiebt, sondern alles auf seinem Kern lässt. Das kann Dein Programm durchaus beschleunigen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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