// 錯誤:放在迴圈內
for (int i = 0; i < 3; i++) {
Random r = new Random(); // 每次新建
int n = r.Next(1, 4);
// 連續執行時 n 相同;逐步偵錯時因時間間隔較長,可能不同
}
Random() 無參建構子以 Environment.TickCount(毫秒級)為種子。// 正確:單一實例重複使用
Random r = new Random(); // 放在迴圈外
for (int i = 0; i < 3; i++) {
int n = r.Next(1, 4); // 每次取下一個隨機數
}
// ThreadLocal 隔離,避免競爭
ThreadLocal<Random> localRandom = ThreadLocal.withInitial(Random::new);
int n = localRandom.get().Next(1, 4);
或使用 .NET 6+ 的 Random.Shared(內建執行緒安全)。
Random 實例化一次,重複呼叫 Next();切勿在高頻迴圈中反覆 new Random()。