1

リクエストを保存しているアプリケーションがあります。

ミリ秒単位で複数のリクエストを取得しています。

次のような一意のIDを作成しています

Random _r = new Random();
int n = _r.Next(9);
String.Format("{0:yyyyMMddHHmmss}{1}", DateTime.Now, n.ToString());

ただし、複数のリクエストがミリ秒単位で送信される場合。この UniqueID が繰り返されています。

これらのリクエストを 1 つの一意の ID で保存しています。しかし、リクエストがミリ秒のタイムスパンで来る場合、それは繰り返されます

これについて私を助けてください....どこか間違っている場合は、どこかで私に提案してください..

4

4 に答える 4

2

Randomルーチンの各実行から参照されるインスタンスが 1 つ必要です。

public class Helper
{
    Random _r = new Random();
    public string GetUniqueId()
    {
        int n = _r.Next(9);
        return String.Format("{0:yyyyMMddHHmmss}{1}", DateTime.Now, n.ToString());
    }
}

Random短い間隔で多くの s をインスタンス化するときに発生する問題が発生しています。各インスタンスは最終的に同じシード値になるため、疑似乱数の一連の値はすべて同一になります。すべての呼び出しに 1 つのインスタンスを使用すると、一連の次の値が保証されます。

maxValue行で同じ値を取得する可能性は、 の引数のサイズに反比例することに注意してくださいNext

于 2013-10-07T15:41:07.093 に答える
0

_rメソッドを実行するスコープよりも高いスコープで定義および作成する必要があります。それよりも、メソッドは のこのインスタンスを使用して_r、生成された他の乱数を取得する必要があります。

于 2013-10-07T15:40:53.627 に答える