Ich habe eine lokale Klasse mit einer Methode zum Erstellen einer Liste von Zeichenfolgen und ich finde, dass, wenn ich diese Methode (in einer for-Schleife von 1000 Mal) oft nicht die Menge, die ich anfordern, zurückgibt.Was ist falsch in Bezug auf die Leistung mit diesem Code? List.Contains, zufällige Verwendung, Threading?
Ich habe eine globale Variable:
string[] cachedKeys
Parameter an die Methode übergeben:
int requestedNumberToGet
Das Verfahren ähnlich wie diese aussieht:
List<string> keysToReturn = new List<string>();
int numberPossibleToGet = (cachedKeys.Length <= requestedNumberToGet) ?
cachedKeys.Length : requestedNumberToGet;
Random rand = new Random();
DateTime breakoutTime = DateTime.Now.AddMilliseconds(5);
//Do we have enough to fill the request within the time? otherwise give
//however many we currently have
while (DateTime.Now < breakoutTime
&& keysToReturn.Count < numberPossibleToGet
&& cachedKeys.Length >= numberPossibleToGet)
{
string randomKey = cachedKeys[rand.Next(0, cachedKeys.Length)];
if (!keysToReturn.Contains(randomKey))
keysToReturn.Add(randomKey);
}
if (keysToReturn.Count != numberPossibleToGet)
Debugger.Break();
Ich habe etwa 40 Saiten in CachedKeys, deren Länge 15 Zeichen nicht überschreitet.
Ich bin kein Experte mit Threading, so dass ich diese Methode buchstäblich 1000 Mal in einer Schleife aufrufen und konsequent dort debuggen.
Die Maschine, auf der diese läuft, ist ein ziemlich bulliger Desktop, also würde ich erwarten, dass die Breakout-Zeit realistisch ist, tatsächlich bricht sie zufällig an irgendeinem Punkt der Schleife (ich habe 20s, 100s, 200s, 300s gesehen) .
Hat jemand irgendwelche Ideen, wo ich damit falsch liege?
Edit: Begrenzt auf .NET 2.0
Edit: Der Zweck des Ausbruchs ist so, dass, wenn das Verfahren zu lange dauert auszuführen, der Client (mehrere Web-Server die Daten für XML-Feeds verwenden) muss nicht warten, während die anderen Projektabhängigkeiten initialisiert werden, sie erhalten nur 0 Ergebnisse.
Edit: Ich dachte, die Wertentwicklung aufweisen würde Statistik
Original-
- ',0042477465711424217323710136' - 10
- '0,0479597267250446634977350473' - 100
- ',4721072091564710039963179678' - 1000
Skeet
- '0,0007076318358897569383818334' - 10
- ',007256508857969378789762386' - 100
- ',0749829936486341141122684587' - 1000
Freddy Rios
- '0,0003765841748043396576939248' - 10
- ',0046003053460705201359390649' - 100
- ‚0.0417058592642360970458535931' - 1000
Welche Sprache verwenden Sie? Es sieht wie Java aus, aber Sie sollten es mit der richtigen Sprache markieren. – Elie
Entschuldigung, das ist C# .NET 2.0 –
Entschuldigung, ich rolle gerade zurück, ohne die Tags genau zu betrachten. Entschuldigen Sie. –