发布:2023/12/7 15:43:09作者:大数据 来源:大数据 浏览次数:392
命名空间:System.Diagnostics
Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。
Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量运行时间。通过属性 Elapsed、ElapsedMilliseconds 或 ElapsedTicks 查询运行时间值。当实例正在运行或已停止时,可以查询运行时间属性。运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。
默认情况下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。每次调用 Start 时开始累计运行时间计数;每次调用 Stop 时结束当前时间间隔测量,并冻结累计运行时间值。使用 Reset 方法可以清除现有 Stopwatch 实例中的累计运行时间。
Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。
Stopwatch 类为托管代码内与计时有关的性能计数器的操作提供帮助。具体说来,Frequency 字段和 GetTimestamp 方法可以用于替换非托管 Win32 API QueryPerformanceFrequency 和 QueryPerformanceCounter。
C# Stopwatch类
命名空间:System.Diagnostics;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<span class="hljs-keyword">namespace <span class="hljs-title">System.Diagnostics { <span class="hljs-comment">// 提供一组方法和属性,可用于准确地测量运行时间。 public class Stopwatch { // 获取以每秒计时周期数表示的计时器频率。此字段为只读。 public static readonly <span class="hljs-built_in">long</span> Frequency; // 指示计时器是否基于高分辨率性能计数器。此字段为只读。 public static readonly <span class="hljs-built_in">bool</span> IsHighResolution; // 初始化 System.Diagnostics.Stopwatch 类的新实例。 <span class="hljs-function">public Stopwatch(<span class="hljs-params">); // 获取当前实例测量得出的总运行时间。 // 返回结果: // 一个只读的 System.TimeSpan,用于表示当前实例测量得出的总运行时间。 public TimeSpan Elapsed { get; } // 获取当前实例测量得出的总运行时间(以毫秒为单位)。 // 返回结果: // 一个只读长整型,表示当前实例测量得出的总毫秒数。 public <span class="hljs-built_in">long</span> ElapsedMilliseconds { get; } // 获取当前实例测量得出的总运行时间(用计时器计时周期表示)。 // 返回结果: // 一个只读长整型,表示当前实例测量得出的计时器计时周期的总数。 public <span class="hljs-built_in">long</span> ElapsedTicks { get; } // 获取一个指示 System.Diagnostics.Stopwatch 计时器是否在运行的值。 // 返回结果: // 如果 System.Diagnostics.Stopwatch 实例当前正在运行,并且在对某个时间间隔的运行时间进行测量,则该值为 true;否则为 false。 public <span class="hljs-built_in">bool</span> IsRunning { get; } // 获取计时器机制中的当前最小时间单位数。 // 返回结果: // 一个长整型,表示基础计时器机制中的计时周期计数器值。 public static <span class="hljs-built_in">long</span> GetTimestamp(); // 对新的 System.Diagnostics.Stopwatch 实例进行初始化,将运行时间属性设置为零,然后开始测量运行时间。 // 返回结果: // 刚刚开始测量运行时间的 System.Diagnostics.Stopwatch。 public static Stopwatch StartNew(); // 停止时间间隔测量,并将运行时间重置为零。 public void Reset(); // 停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。 public void Restart(); // 开始或继续测量某个时间间隔的运行时间。 public void Start(); // 停止测量某个时间间隔的运行时间。 public void Stop(); } }</span></span></span></span></span> |
Stopwatch的命名空间是using System.Diagnostics;
从上文看到Restart()等于Reset()加Start()
使用流程如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Stopwatch sw = <span class="hljs-keyword">new Stopwatch(); <span class="hljs-comment">//开始计时 sw.Start(); //重新设置为零 sw.Reset(); //重新设置并开始计时 sw.Restart(); //结束计时 sw.Stop(); //获取运行时间间隔 TimeSpan ts = sw.Elapsed; //获取运行时间[毫秒] <span class="hljs-built_in">long</span> times = sw.ElapsedMilliseconds; //获取运行的总时间 <span class="hljs-built_in">long</span> times2 = sw.ElapsedTicks; //判断计时是否正在进行[true为计时] <span class="hljs-built_in">bool</span> isrun = sw.IsRunning; //获取计时频率 <span class="hljs-built_in">long</span> frequency = Stopwatch.Frequency;</span></span> |
Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。 在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。
Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。 使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量运行时间。 通过属性 Elapsed、ElapsedMilliseconds 或 ElapsedTicks 查询运行时间值。 当实例正在运行或已停止时,可以查询运行时间属性。 运行时间属性在 Stopwatch 运行期间稳固递增;在该实例停止时保持不变。
默认情况下,Stopwatch 实例的运行时间值相当于所有测量的时间间隔的总和。
时间对比,如下结果,提升不少:
单条同步本地人员表:00:00:01.5201270
批量同步本地人员表:00:00:00.0892015
INSERT 语句中行值表达式的数目超出了 1000 行值的最大允许值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
//删除本地数据 SqlHelper.ExecuteSql(connStrLocal, "delete from staffer"); var dataReader = SqlHelper.ExecuteSqlReader(connStrRemote, "select * from staffer"); int i = 0; sw.Restart(); while (dataReader.Read()) { //插入到本地人员表 SqlHelper.ExecuteSql(connStrLocal, "insert into staffer(RecordID,stafferID,CardID,name, department,[group],worktype) values(" + dataReader["RecordID"].ToString() + ",'" + dataReader["stafferID"].ToString() + "','" + dataReader["CardID"].ToString() + "','" + dataReader["name"].ToString() + "','" + dataReader["department"].ToString() + "','" + dataReader["group"].ToString() + "','" + dataReader["worktype"].ToString() + "')"); progressBar1.Value = i++; } sw.Stop(); Console.WriteLine("单条同步本地人员表:" + sw.Elapsed); //删除本地数据 SqlHelper.ExecuteSql(connStrLocal, "delete from staffer"); var dr = SqlHelper.ExecuteSqlReader(connStrRemote, "select * from staffer"); StringBuilder sb = new StringBuilder(); string header = "insert into staffer(RecordID,stafferID,CardID,name,department,[group],worktype) values"; sb.Append(header); sw.Restart(); int n = 0; while (dr.Read()) { sb.AppendFormat("({0},'{1}','{2}','{3}','{4}','{5}','{6}'),", dr["RecordID"].ToString(), dr["stafferID"].ToString(), dr["CardID"].ToString(), dr["name"].ToString(), dr["department"].ToString(), dr["group"].ToString(), dr["worktype"].ToString()); n++; if (n == 1000) { SqlHelper.ExecuteSql(connStrLocal, sb.Remove(sb.Length - 1, 1).ToString()); sb.Clear(); sb.Append(header); n = 0; } } if (n > 0) { SqlHelper.ExecuteSql(connStrLocal, sb.Remove(sb.Length - 1, 1).ToString()); } sw.Stop(); Console.WriteLine("批量同步本地人员表:" + sw.Elapsed); |
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4