DateTime.Now.Ticks给出相同的刻度值

时间:2016-06-01 10:37:09

标签: c# asp.net loops datetime

我的一位同事有这个问题。请检查下面的代码

    foreach (GridViewRow grv in grvCatalogUpload.Rows)
{
    Label lblVariantName = (Label)grv.FindControl("lblVariantName");
    Label lblDesciption = (Label)grv.FindControl("lblDesciption");

    //...get all controls from grid..//

    ent = new TempVariantMst();


    string fpath = string.Empty;
    string extension = string.Empty;
    string fileName = string.Empty;
    fpath = ViewState[vs_DirName].ToString() + "//" + lblImageName.Text;

    extension = Path.GetExtension(fpath);

    string tick = string.Empty;
    tick = DateTime.Now.Ticks.ToString();

    //-------------same tick on 3rd,4th iteration---------------------//

    fileName = tick+ extension;

    //-------------same tick on 3rd,4th iteration---------------------//

    logger.ErrorFormat("fpath, Details error:{0}{1} ", Environment.NewLine, fpath);
    logger.ErrorFormat("Server.MapPath(FolderPath + fileName), Details error:{0}{1} ", Environment.NewLine, Server.MapPath("~/" + FolderPath + fileName));
    System.IO.File.Copy(fpath, Server.MapPath("~/" + FolderPath + fileName));

    ent.ImagePath = fileName;
   //...set ent..//

    adminService = new AdminService();
    adminService.InsertTempVariantMst(ent);

}

我已经看到同样的问题here,但那里的答案表明处理器速度很快,因此滴答值在迭代之间不会改变。

这里我们正在保存一个文件并在DB中插入数据,这应该花费更多的时间,因此tick值应该是不同的而不是。现在作为临时解决方案,我们添加了gridview行索引,带有tick

1 个答案:

答案 0 :(得分:0)

我建议您使用GUID代替DateTime.Ticks来获取您的唯一名称 - 否则,如果数据库代码运行速度超出预期,您将发生冲突。

类似的东西:

fileName = Guid.NewGuid().ToString() + grv.RowIndex.ToString() + extension;

这将为您提供有保证的唯一文件名。