我想记录进行某操作花的时间,代码如下:
DateTime start = DateTime.Now;
……//操作
DateTime end = DateTime.Now; int tc = (int)end.Subtract(start).TotalSeconds;
这个操作实际花了30多秒,但是tc算出来是300多,我的用法有啥问题吗,找了很久没找到原因,是不是我脑袋短路了,求大神指点
具体操作是插入数据库
int size = 100000; int count = allList.Count / size + 1; for (int m = 0; m < count; m++) { List<DetailInfo> clist = allList.Skip(m * size).Take(size).ToList(); if (clist.Count == 0) continue; isok =Insert("DetailInfo",DataTableHelper<DetailInfo>.ToDataTable(clist)); } public static bool Insert(string TableName, DataTable dt) { using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) { try { sqlbulkcopy.DestinationTableName = TableName; sqlbulkcopy.BulkCopyTimeout = 36000; for (int i = 0; i < dt.Columns.Count; i++) { sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkcopy.WriteToServer(dt); return true; } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } return false; } } }
Subtract的使用没问题,实际应该花了就是300多秒
DateTime start = DateTime.Parse("2017-12-18 13:00:00");
DateTime end = DateTime.Parse("2017-12-18 13:00:30");
int tc = (int)end.Subtract(start).TotalSeconds;
Console.WriteLine(tc); //30
我调试过,看了两个时间直接确实只差了30多秒,而且我还盯着电脑时间看过,确实只过了30多秒,远远不到330多秒
@hangjy: 把start与end的值打印出来看看
var stopwatch = new StopWatch();
stopwatch.start();
you do...
stopwatch.stop();
here stopwatch.Properties
谢谢,让我学到了一种计时方法。但是我用一个for循环测试了Stopwatch和我上面那种方法,结果是一样的,所以我想知道我的问题里面出现差别是哪儿出问题了
终于发现是个乌龙,我每次是把四个excel读出来插入数据库,分别命名为xxx0到xxx3,我设定的到第四个文件的时候执行插入操作,并把执行时间附件在文件名后面输出来,于是就变成了xxx334之类的,其实只有后两位数字是时间。
果然是我脑袋短路了