AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi MultiThreading Bei mir ca. 40x Langsamer bei IntegerBerechnu
Thema durchsuchen
Ansicht
Themen-Optionen

MultiThreading Bei mir ca. 40x Langsamer bei IntegerBerechnu

Ein Thema von Hallo_Thomas · begonnen am 18. Aug 2006 · letzter Beitrag vom 21. Aug 2006
 
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

MultiThreading Bei mir ca. 40x Langsamer bei IntegerBerechnu

  Alt 18. Aug 2006, 16:49
Hallo,Ich habe ein mein erstes Multithreading-TestProgramm geschrieben,& es ist vieeeeeeeeeeeel zu langsam.

Ich setzte den einmal die gleiche Rechenschleife in einen Thread ein & einmal in eine Procedore.Und in meinem Programm ist die Procedur 40x Schneller!

Mir ist schon klar, das die erschaffung der Threads und so, die Sache so verlangsamt.

Aber auch Multithreading kann ja heutzutage effizenter eingetzt werden!

Was mache ich also bei meinem Programm, wo an den Thread eine Array übergeben wird und dann auch die Array zurück!


Das Programm sieht wie folgt aus unit1=>Startet SteuerTread(Hier wird alles berechnet)=>Dieser verwaltet die NebenThreads1&2 die die Berechnungen durchführen

Dies ist die Procedure und Rechenschleife, das gliche wird in den Threads berechnet!
Delphi-Quellcode:
 procedure Counten(Var Feld1:TIntegerDynArray);
Var x,y:Integer;
begin
    for y:=0 to 13 do
    for x:=0 to 156 do Feld1[x]:=Feld1[x]+1*2 div 2;
    x:=SumInt(Feld1);
end;
Hier der Code von meiner Threadschleife:
Code:
procedure TGeldStatistikThread.ThreadDone(Sender: TObject);
begin
  Dec(ThreadsRunning);
  Dec(Fi);
  Case ThreadsRunning of
  0:begin
     ThreadsRunning:=5;
     with TThread1.Create(Feld) do
      OnTerminate := ThreadDone;
      with TThread2.Create(Feld) do
      OnTerminate := ThreadDone;
    end;
  3:begin
      ThreadsRunning:=2;
      with TThread1.Create(Feld) do
      OnTerminate := ThreadDone;
      with TThread2.Create(Feld) do
      OnTerminate := ThreadDone;
      //Dec(Listenlaenge);
      if Fi<0 Then
      begin
        Synchronize(Label2);
        ThreadsRunning:=10;
      end;
    end;
  end;
end;
NebenThread1 & 2 sind Identisch!
Code:
unit UnitNebenThread1;

interface

uses
  Classes,Types,math;

type
  TNebenThread1 = class(TThread)
  private
  Fe:TIntegerDynArray;
  Liste:Integer;
    { Private declarations }
  protected
    procedure Execute; override;
    procedure Counten2(Var Feld1:TIntegerDynArray); virtual; abstract;
  public

    constructor Create(Var Feld:TIntegerDynArray);
  end;
  { TThreadCounter }
  TThread1  = class(TNebenThread1)
  protected
    procedure Counten2(Var Feld1:TIntegerDynArray); override;
  end;
implementation

uses unit1;

constructor TNebenThread1.Create(Var Feld:TIntegerDynArray);
begin
  Fe:=Feld;
  FreeOnTerminate := True;
  inherited Create(False);
end;

procedure TNebenThread1.Execute;
begin
  Counten2(Fe){ Thread-Code hier einfügen }
end;

procedure TThread1.Counten2(Var Feld1:TIntegerDynArray);
Var x,y:Integer;
begin
    for y:=0 to 13 do
    for x:=0 to 156 do Feld1[x]:=Feld1[x]+1*2 div 2;
    x:=SumInt(Feld1);
end;


end.
Angehängte Grafiken
Dateityp: jpg form1bild_877.jpg (9,2 KB, 71x aufgerufen)
Angehängte Dateien
Dateityp: zip scoure_140.zip (26,3 KB, 6x aufgerufen)
Dateityp: zip project1_101.zip (202,7 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
 


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 02:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz