![]() |
System.Random ...
Hallo,
ich programmiere unter Delphi 2006. Mit der Funktion CreateID bastle ich mir eine 50stellige ID zusammen. Ich dachte mir, wenn diese aus alphanumerischen Zeichen besteht, und 50 Stellen lang ist, kann ich lang warten, bis sich eine solche ID regeneriert.
Delphi-Quellcode:
Wenn ich die Funktion einzeln aufrufe, funktioniert das auch prima. Aber wenn ich die Funktion aus einer Schleife heraus z.B. 10 mal aufrufe, dann wird mir 10 mal dieselbe ID zurückgegeben.
function CreateID : String;
// e.g.: 0mCn66760-VLs485uLU-mkU0t0Cxu-r80bLf63m-8Q7mDABsXV var zw : System.String; i : System.Int32; s : System.Random; begin zw:=''; s:=System.Random.Create; for i := 1 to 50 do if (((i mod 10) = 0) and (i <> 50)) then zw:=zw+'-' else case s.Next(0, 3) of 0: zw:=zw+Convert.ToChar(s.Next(48, 57)); 1: zw:=zw+Convert.ToChar(s.Next(65, 90)); 2: zw:=zw+Convert.ToChar(s.Next(97, 122)); end; s.Free; result:=zw; end;
Delphi-Quellcode:
Rufe ich dieselbe Schleife nocheinmal auf, wird mir wieder 10 mal dieselbe, aber eine andere ID wie zuvor zurückgegeben.
for LfVar:=0 to 9 do
ListBox1.SelectedIndex:=ListBox1.Items.Add(CreateID); Was übersehe ich da? Danke, Stefan P.S.: Was ich schon alles probiert habe - und nix gebracht hat... + System.Random.Create mit beliebigen Seeds gefüttert + für jede verwendete Zufallszahle eine eigene Instanz gebildet |
Re: System.Random ...
Zitat:
Zitat:
PS: Bei deinen vielen String-Konkatenationen wird dir der GC an die Decke springen. Benutze besser die StringBuilder-Klasse. |
Re: System.Random ...
Zitat:
|
Re: System.Random ...
Morgen,
danke für die Tipps! Eine System.Threading.Thread.Sleep(10) hat Wunder gewirkt :-) Hab jetzt eine Lösung auf GUID-Basis gebastelt:
Delphi-Quellcode:
Schönen Tag noch, Steff
function CreateID : System.String;
var y : System.Guid; x : array of System.String; begin x:=(y.NewGuid.ToString+'-'+y.NewGuid.ToString).Split(['-']); &Array.Sort(x); result:=System.&String.Join('-', x); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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-2025 by Thomas Breitkreuz