有一个时间关键的应用程序处理来自交易服务器的消息,我们每秒大约10K msgs ...有时候应用程序往往花费大量时间在数据库中进行插入...经过几天与开发团队来回讨论哪一方花时间,我们的数据库团队决定构建一个简单的C#应用程序,该应用程序驻留在同一机架上的服务器上,与数据库服务器位于同一网络上。有问题的数据库是sql server 2012标准。
时间是以这种方式从ado.net获取的......
var currT1 = DateTime.Now;
sqlComm.ExecuteNonQuery();
var loadT = DateTime.Now;
来自sql server的时间来自服务器端跟踪的startTime和endTime列......这两个服务器是时间同步的,但差异为10-15 ms ...
现在让我想要对某些东西感到震惊的是,虽然可以理解应用程序需要的时间比db(因为它必须处理以及其他东西)...但在某些情况下,数据库报告花了4毫秒,但应用说它花了零毫秒!!
我肯定认为这个错误与测试应用程序有关......但是没有什么可以将db调用与两个时间戳分开...日志读取如下...应用时间(开始,结束,差异,方法)跟随通过db调用(starttime,endtime,diff)
10:46:06.716
10:46:06.716
0:00:00.000
DataAdapter
10:46:06.697
10:46:06.700
0:00:00.003
还有什么我应该提供的吗?
答案 0 :(得分:0)
根据您的观察结果,我们使用了秒表类......然后我们得到了一个更奇怪的问题...我们使用了秒表。经过了一个属性,认为将它除以10会给我们微秒。 。服务器端跟踪中的持续时间列以微秒为单位,因为它已保存到file。仍然,应用程序的时间少于数据库...事实证明,要使用的属性是elapsed.tick而不是获取microseconds的elapsedtick属性。将elapsed.tick除以10给了我们微秒......
所以它是......让应用程序和数据库都给我们非常接近准确(不能确定:) :)次...
我得出的结论是,不仅不相信datetime.now .net属性,而且还有startTime和endTime服务器跟踪列...从专用计时器计算持续时间是必需的......
感谢排队的人......