c# - Using clock ticks as random number seed -
i'm using current clock ticks seed random number generation. random number used in pseudo guid , check in database make sure doesn't exist before returning. on average, method called around 10k times in succession during life of process.
my concern identical number might generated back resulting in multiple unnecessary recursive calls database checking same id. i'd avoid if possible. best way test scenario?
if matters, application .net 4 , database sql server 2008.
private static string generateuniquedelid() { // generate random integer using current number of clock ticks seed. // prefix number "del" , date, padding random integer leading zeros 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 generated id in sesame. if 1 exists, call method recursively. string query = "select * lead 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()
you right in concern: should move creation of random instance out of method body - otherwise re-seed same value many times results in same number sequence.
also kinda re-inventing wheel: default constructor of random class uses current clock time default seed.
the question why don't avoid of , use auto-generated guid on database side?
Comments
Post a Comment