gpt4 book ai didi

c# - 使用时钟滴答作为随机数种子

转载 作者:太空狗 更新时间:2023-10-29 22:08:22 25 4
gpt4 key购买 nike

我使用当前时钟滴答作为随机数生成的种子。随机数用于伪 GUID,检查我的数据库将确保它在返回之前不存在。平均而言,此方法将在进程的生命周期内连续调用约 10k 次。

我担心的是,可能会连续生成相同的数字,从而导致对我的数据库进行多次不必要的递归调用以检查相同的 ID。如果可能的话,我想避免这种情况。测试此场景的最佳方法是什么?

如果重要的话,应用程序是 .NET 4,数据库是 SQL Server 2008。

private static string GenerateUniqueDelId()
{
// Generate a random integer using the current number of clock ticks as seed.
// Then prefix number with "DEL" and date, finally padding random integer with leading zeros for a fixed 25-character total length.
int seed = (int)DateTime.Now.Ticks;
Random number = new Random(seed);
string id = string.Format("DEL{0}{1}", DateTime.Today.ToString("yyyyMMdd"), number.Next().ToString("D14"));

// Lookup record with generated ID in Sesame. If one exists, call method recursively.
string query = "SELECT * FROM Lead WHERE Esm_Id = @Esm_Id";
SqlParameter[] parameters = { new SqlParameter("@Esm_Id", id) };
if (DataManager.GetRow(query, parameters, DelConnection.Sesame) != null) return GenerateUniqueDelId();

// Otherwise, return ID.
return id;
} //// End GenerateUniqueDelId()

最佳答案

您的担忧是对的:您应该将 Random 实例的创建移出您的方法主体 - 否则您将多次使用相同的值重新播种,从而导致相同的数字顺序。

此外,您有点在重新发明轮子:Random 类的默认构造函数已经使用当前时钟时间作为默认种子。

问题是你为什么不避免所有这些而只在数据库端使用自动生成的 Guid?

关于c# - 使用时钟滴答作为随机数种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com