datetime.now 时间不准确

weixin_38049770 2017-09-25 12:22:43
webfrom 访问 webapi
webapi 开启 thread
thread 执行 以GO分隔的SQL
sql 执行一句触发一次 ExectueLine
ExectueLine 写入日志 兼websocket(fleck)广播。。。这里有个datetime.now
webform 前端 websocket 接收消息也加上时间,,,

这个webform js  new Date() 时间不等于ExectueLine Datetime.now

在本机测试,,,,
win7 .net 4.6 C#  sql server 2008

这.net 莫名奇妙的坑跟BUG真太多了。。。。。。。估计我也得转JAVA了,,,不然得被坑死

申明下,,这个不等,最多可以差40几秒,根据执行时间需求。。
比如有个执行,,,数着执行了10秒ExectueLine Datetime.now,时间差显示,,,不到1秒。。。
执行12秒左右,,,竟然只有600多毫秒的时间差。。。。。。
开始执行SQL之后才会,,,,执行之前时间正常。。。。
这个测试结果是在获取 webconfig之后,,,无保存动作,,,,,记得后来把获取 webconfig注释了也一样的效果(这里不太确定)



private long d1 = DateTime.Now.Ticks; /// <summary> /// 执行事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DbHelperSQL_ExecuteOneLine(object sender, ErrorEventArgs e) { var d2 = DateTime.Now.Ticks; var mill = (d2 - d1)/10000; d1 = d2; SocketSevice.Instance.BroadcastMessage(DateTime.Now.TimeOfDay.ToString()+"。。。SQL执行。。。"+ mill.ToString()+"毫秒..." + e.ToString()); }


DbHelperSQL.ExecuteOneLine += DbHelperSQL_ExecuteOneLine; DbHelperSQL.ExecuteSqlWithGo(sql); DbHelperSQL.ExecuteOneLine -= DbHelperSQL_ExecuteOneLine;

/// <summary> /// 执行完一句 /// </summary> public static event System.EventHandler<ErrorEventArgs> ExecuteOneLine; /// <summary> /// 执行多行SQL语句,返回影响的记录数 /// 以GO分隔。就是管理工具里执行的脚本 /// Linyee 2017-09-19 /// </summary> /// <param name="sql"></param> public static int ExecuteSqlWithGo(String sql) { int effectedRows = 0; using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); //cmd.CommandTimeout = 15;//15秒超时 创建数据库所需的时间大约15秒 cmd.Connection = conn; try { //注: 此处以 换行_后面带0到多个空格_再后面是go 来分割字符串 String[] sqlArr = Regex.Split(sql.Trim(), "\r\n\\s*go", RegexOptions.IgnoreCase); foreach (string strsql in sqlArr) { //System.Threading.Thread.Sleep(100); if (strsql.Trim().Length > 1 && strsql.Trim() != "\r\n") { cmd.CommandText = strsql; try { effectedRows = cmd.ExecuteNonQuery(); }catch(Exception ex) { AllErrors.Add(ex); if (ExecuteOneLine != null) ExecuteOneLine(cmd, new ErrorEventArgs() { Code=-2000, Message="发生错误!", ErrMessage = ex.Message,Description= strsql }); } finally { if (ExecuteOneLine != null) ExecuteOneLine(cmd,new ErrorEventArgs() { Message="执行完成!" }); } } } } catch (Exception E) { throw E; } finally { conn.Close(); WaitClosed(conn); } return effectedRows; } }


...全文
312 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38104476 2017-09-25
  • 打赏
  • 举报
回复
这几个时间肯定不相等,代码执行需要耗费时间,从前端处理到数据库后端,
这几个时间段的时间肯定有差异,需要根据需求看取以何种时间为准,
专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
weixin_38114194 2017-09-25
  • 打赏
  • 举报
回复
9:19:3.701==>09:19:03.6826319。。。SQL执行。。。154毫秒...0,执行完成! 9:19:3.581==>09:19:03.5285241。。。SQL执行。。。62毫秒...0,执行完成! 9:19:3.505==>09:19:03.4664797。。。SQL执行。。。103毫秒...0,执行完成! 9:19:3.409==>09:19:03.3634062。。。SQL执行。。。74毫秒...0,执行完成! 9:19:3.291==>09:19:03.2893535。。。SQL执行。。。191毫秒...0,执行完成! 9:19:3.100==>09:19:03.0982183。。。SQL执行。。。168毫秒...0,执行完成! 9:19:2.944==>09:19:02.9300972。。。SQL执行。。。174毫秒...0,执行完成! 9:19:2.797==>09:19:02.7559736。。。SQL执行。。。107毫秒...0,执行完成! 9:19:2.650==>09:19:02.6488970。。。SQL执行。。。99毫秒...0,执行完成! 9:19:2.551==>09:19:02.5498263。。。SQL执行。。。142毫秒...0,执行完成! 9:19:2.408==>09:19:02.4077259。。。SQL执行。。。142毫秒...0,执行完成! 9:19:2.267==>09:19:02.2656244。。。SQL执行。。。180毫秒...0,执行完成! 9:19:2.101==>09:19:02.0854960。。。SQL执行。。。84毫秒...0,执行完成! 9:19:2.3==>09:19:02.0014362。。。SQL执行。。。124毫秒...0,执行完成!


好了,这个是在win10 sql server 2012 上的测试结果,,,正常的~~

申明下,,这个不等,最多可以差40几秒,根据执行时间需求。。 比如有个执行,,,数着执行了10秒ExectueLine Datetime.now,时间差显示,,,不到1秒。。。 执行12秒左右,,,竟然只有600多毫秒的时间差。。。。。。

win7 sql 2008 上测试后面是一堆的 0毫秒 1毫秒

9:18:52.361==>09:18:52.3582131。。。执行脚本保存成功! 9:18:52.341==>09:18:52.3371970。。。SQL执行。。。10952毫秒...0,执行完成!

这句10于20秒的 CREATE DATABASE ,昨天在win7上执行,,一直都是600多毫秒。。。

补下:昨天的win7 是 VS2017。
         今天的win10是VS2015。

这个或许跟VS也有关,,,因为VS2017用起来没有VS2015稳定。。。

467

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧