Entwickler-Ecke

Andere .NET-Sprachen - parallel loop Bibliotheken


Mitmischer 1703 - Sa 17.04.10 20:50
Titel: parallel loop Bibliotheken
Hi DF :)!

Ich habe mal wieder eine Frage zu Delphi Prism:

Wenn ich das Feature des parallel loop anwenden will, bekomme ich eine böse Fehlermeldung - die Syntax müsste aber eigentlich in Ordnung sein:


Delphi-Quelltext
1:
2:
3:
4:
  var Dirs := System.IO.Directory.GetDirectories(fFileName).ToList;
   [...]
  for parallel i:  Int32 := 0 to Dirs.Count-1 do begin
   [...]


Jetzt wirft er mir folgenden Fehler:

Fehler 5 (PE250) "parallel"-Feature benötigen die Parallel Extensions (System.Threading.dll) und die Linq-Bibliotheken (System.Core.dll)

System.Threading konnte ich noch einbinden, aber System.Core hat mein Delphi Prism nicht. Ich hab probiert auf System.Linq auszuweichen, aber das kümmert den Compiler wenig.

Bekommt ihr eine parallel-Scheife zum Laufen?


Kha - Sa 17.04.10 20:55

Du verwechselst Namespaces und Assemblies. Es gibt keine System.Linq-Assembly, nur einen gleichnamigen Namespace in der System.Core.dll (3.5).
Was in deinen uses steht, dürfte für das Feature keine Rolle spielen; Hauptsache, du hast die erwähnten Assemblies als Verweise hinzugefügt.


Mitmischer 1703 - Sa 17.04.10 21:01

Hmm, ich hab mal unter den Verweisen nachgeguckt, und dort war System.Core eingebunden, aber System.Threading nicht.

Ich bin dann auf 'Verweis hinzufügen' gegangen, wo sich ein Fenster mit einer Liste öffnete. In dieser Liste stand diesmal System.Threading nicht drin.

Was soll ich machen?


Kha - Sa 17.04.10 21:19

Auf .NET 4 (und damit VS 2010) upgraden, ist immerhin schon seit ganzen vier Tagen verfügbar :zwinker: .
Wenn du an 3.5 gebunden bist, solltest du eine relativ aktuelle Version des Parallel-Frameworks in Rx [http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx] finden, offiziell unterstützt wird die allerdings nicht.


Mitmischer 1703 - Sa 17.04.10 21:49

Aber das muss doch auch mit meinen Mitteln funktionieren!


Christian S. - Sa 17.04.10 22:00

Du brauchst die System.Threading.dll.

Wo Du die System.Threading.dll herbekommst hat Kha in seinem letzten Posting beschrieben.


Mitmischer 1703 - Sa 24.04.10 16:48

Hier bin ich noch mal, musste die ganze Zeit in native Delphi programmieren ;)

Ich hab jetzt beide Assemblies eingebunden, er wills aber trotzdem noch nicht fressen.

Mach ich irgendetwas falsch (Screenshot)?

Ich verwende die Rx-Bibliotheken, die Kha angesprochen hat.


Christian S. - Sa 24.04.10 16:52

Kannst Du das Projekt (oder besser noch ein minimales Beispielprojekt) mal anhängen, dass ich das bei mir ausprobiere. Denn eigentlich sollte es so gehen :gruebel:


Mitmischer 1703 - Sa 24.04.10 17:23

Klar =)

Ist jetzt kein Beispielprojekt, sondern mein aktuelles.

Aber ich erstelle grad ein Beispielprojekt.


Christian S. - Sa 24.04.10 17:38

Hm. Also bei mir kompiliert das so. :gruebel: Allerdings habe ich auch eine neuere Version von Prism, vielleicht ist in Deiner ein Bug drin, dass der wirklich die System.Threading.dll aus den ParallelExtensions braucht und die neue aus Rx nicht akzeptiert.


Mitmischer 1703 - Sa 24.04.10 17:39

Hmm, ich glaub, Latinum bekomme ich nicht :lol: :lol:

Geht auch mit dem Beispielprojekt nicht, leere Form, ein Button, Assemblies eingebunden und einfache parallele Schleife (siehe Screen)


Mitmischer 1703 - Sa 24.04.10 17:40

Und woher bekomme ich die ParallelExtensions?


Kha - Sa 24.04.10 18:06

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Auf .NET 4 (und damit VS 2010) upgraden
;)

Aber da du nun schon Rx runtergeladen hast, ist das eigentlich nicht weiter tragisch, denn for parallel dürfte sowieso nur hauchdünner Syntax Sugar sein. Benutze einfach direkt

Delphi-Prism-Quelltext
1:
2:
3:
4:
Parallel.For(0, Dirs.Count - 1, ->
  begin
    ...
  end);


(oder in diesem Fall wahrscheinlich noch besser Parallel.ForEach)