秒表或计时器
我认为,当它从其_Tick()方法显示时间时,计时器不是很准确.我想在几分钟/秒内显示经过的时间,显示了一个过程所需的时间.我已经与计时器一起使用了此功能,但发现其计算不正确.这就是为什么我想问一下秒表会更好地显示更准确的表现,还是我应该完全使用的单独控制? private int timepassed = 0; private void buttonFourteen_Click(object sender, DragEventArgs e) { timer2.Start(); var backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += (s, e) => { //Lengthy Procedure Goes Here }; backgroundWorker.RunWorkerCompleted += (s, e) => { timer2.Stop()
12 2024-04-26
编程技术问答社区
添加停表对C#性能的影响?
将C#停止手表添加到对象中产生了什么? 解决方案 由于我希望在对象创建池中使用一些定时统计来优化其直接的性能对象创建.我想安排一个典型的对象创建(Aprat.20-30ms)来优化创建任务的超时,但前提是添加Stopwatch并没有明显减慢循环的速度. 所以我写了这个测试程序,以分别计时创建的开销,Start(),Stop()和经过的时间检索Stopwatch. using System; using System.Diagnostics; namespace SO9925598_Stopwatch_overhead { class Program { private const int nLoops = 10000; private const double nLoopsDouble = nLoops; private const int waitTime = 2; //ms sta
4 2024-04-26
编程技术问答社区
将一个事件处理程序附加到一个StopWatch上
我想将活动处理程序附加到停止手表.有人可以在C#或VB中提供代码段吗? 我没有运气. 解决方案 有一个适用于计时器的bing ...应该把您带到那里...特别是一个不错的人: http://dotnetperls.com/timer 其他解决方案 这是我用于备份程序的计时器的一个示例 private System.Threading.Timer AutoRunTimer; private void Form1_Load(object sender, EventArgs e) { mybackups = new BackupService(); AutoRunTimer = new System.Threading.Timer(tick, "", new TimeSpan(0, 0, 5), new TimeSpan(1, 0, 0)); } private void tick(
6 2024-04-25
编程技术问答社区
如何在文本块中显示变化的时间?
所以我有一个秒表,我想要的就是要在文本块上显示.我该怎么做? 解决方案 创建一个timerviewModel,看起来像这样: public class TimerViewModel : INotifyPropertyChanged { public TimerViewModel() { timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += new EventHandler(timer_Tick); timer.Start(); startTime = DateTime.Now; } private DispatcherTimer timer; private DateTime startTime; public event Pr
4 2024-04-24
编程技术问答社区
JavaScript 秒表比预期慢
为了成为一名JavaScript开发人员,作为F1粉丝,我不得不制作秒表,以跟踪反应时间.我偶然发现的问题,在我看过的许多教程中,似乎都是如此,这是您真的不能完全毫无疑问. 我的意思是,当我尝试每10毫秒设置一个间隔时,它可以很好地工作,但是如果我尝试为 1毫秒1毫秒设置一个间隔,我的页面上的1秒钟大约是5秒在现实生活中. 在 let clock = document.querySelector('.timer') let interval = null; let milliseconds = 0; let seconds =0; window.addEventListener('click', () => { interval = setInterval(startClock,10) }) document.addEventListener('keyup', event => { if (event.code === 'Space') {
16 2024-04-22
编程技术问答社区
测量计时器的精度(如秒表/QueryPerformanceCounter)。
鉴于C#中的Stopwatch类可以使用下面的三个不同的计时,例如 系统计时器,例如大约+-10 ms的精度取决于可以使用 timeBeginPeriod 可以大约+-1 ms. 时间邮票计数器(TSC),例如tick频率为2.5MHz或1个tick = 400 ns因此,理想情况下是一个精确度. 高精度事件计时器(HPET),例如tick频率为25MHz或1个tick = 40 ns因此,理想情况下是精确的. 我们如何测量可观察到的精度?精度被定义为 精度是指两个或多个测量值与每个测量 其他. 现在,如果Stopwatch使用hpet,这是否意味着我们可以使用Stopwatch获得与计时器频率相等的精度测量值? 我不这么认为,因为这要求我们能够使用零方差或完全固定的开销的计时器,据我所知,对于Stopwatch而言,这是不正确的.例如,使用HPET并致电: var before_ticks = Stopwatch.GetTimestamp();
18 2024-04-20
编程技术问答社区
我如何去实现不同速度的秒表?
理想情况下,我想拥有类似于 stopwatch 课程,但具有称为Speed的额外属性,该属性将决定计时器更改分钟的速度.我不太确定如何实施此操作. 编辑 由于人们似乎不太了解为什么我想这样做.考虑踢足球或任何运动游戏.一半是在几分钟内测量的,但是游戏的时间框架明显降低,即在大约2.5分钟内进行45分钟的一半. 解决方案 您简单的"乘法"不起作用的原因是,它不会加快时间的流逝 - 该因素适用于已通过的所有时间以及通过的时间. 因此,如果将速度系数设置为3,然后等待10分钟,您的时钟将正确读取30分钟.但是,如果然后将因子更改为2,则您的时钟将立即读取20分钟,因为将乘法应用于已经传递的时间.这显然是不正确的. 我不认为秒表是您要使用的"系统时间"的类.我认为您想测量它,并将经过的时间存储在您自己的变量中. 假设您的目标项目确实是一个游戏,则您可能会在代码中的某个地方将"游戏循环"放在某个地方.每次通过循环,您都可以使用常规的秒表对象来测量实时数量的经过
10 2024-04-20
编程技术问答社区
为什么条件(三元)运算符看起来明显更快?
编辑 如果我正确使用Stopwatch,并通过两个数量级来加大迭代次数 Ternary服用了22404ms 正常服用21403ms 这些结果更接近我所期望的,使我觉得全世界都正确(如果不是我的代码.) 三元/条件运算符实际上较小. 从这个问题,我有部分回答. i以X64发布模式编译此控制台应用程序,并进行优化,并从命令行中运行,而无需附加调试器. using System; using System.Diagnostics; class Program { static void Main() { var stopwatch = new Stopwatch(); var ternary = Looper(10, Ternary); var normal = Looper(10, Normal); if (ternary != normal)
14 2024-04-20
编程技术问答社区
32位和64位窗口之间的粒度
我创建了一个用于某些网络调试的小工程应用程序.它列出了IP地址的列表,并使用用户设置超时和速率来贴上它们.它记录了平均往返时间,并且每次发送失败时,它都会记录下来的失败持续时间和时间戳. 这就是主意.我在带有.net4的Win7机器上开发了它,不得不将其放在一组XP笔记本电脑上. 问题是我的盒子上的持续时间值在测试中显示不错的MS持续时间,XP框上时它们显示为0或15.625(魔术数字?)...并且字符串中有有趣的正方形,框符号? public void LinkUp() { if (_isLinkUp) return; _upTime = DateTime.Now; var span = _upTime.Subtract(_downTime); _downTimeLog.Add(new LinkDown() {
8 2024-04-20
编程技术问答社区
在C#中实现高分辨率的DateTime.UtcNow的最佳方法?
我正在尝试实施一项时间服务,该时间服务的准确性比1毫秒更高.我认为一个简单的解决方案是进行初始测量,并使用秒表向其添加三角洲.问题在于,这种方法似乎与墙壁时间相差很快.例如,以下代码试图测量壁时间和我的高分辨率时钟之间的差异: public static void Main(string[] args) { System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch(); DateTime baseDateTime = DateTime.UtcNow; s.Start(); long counter = 0; while(true) { DateTime utcnow = DateTime.UtcNow; DateTime hpcutcnow = baseDateTime + s.Elapsed; Console.W
6 2024-04-19
编程技术问答社区
用 "new() "和".StartNew() "创建一个新实例有什么区别?
来自我的"答案" "任务中的秒表似乎在所有任务中都是附加的" 创建新的Stopwatch timer = System.Diagnostics.Stopwatch.StartNew(); Stopwatch timer = new Stopwatch(); timer.Start(); 暗示: 为什么提供StartNew()方法? 解决方案 StartNew,创建停止观看的新实例并也开始. 简单new仅是秒表实例化.它不会启动秒表. 对于当前代码,您正在创建新实例并调用Start,对Stopwatch.StartNew() 没有任何区别 请参阅 stopwatch.startnew>一个> 此方法是等效用于调用秒表构造函数和 然后在新实例上调用启动. StartNew提供了一种更轻松的方法来创建和启动秒表. 其他解决方案 为什么提供了startnew()方法? 这是一个更简单的选择. StartNew实际上与分配
8 2024-04-18
编程技术问答社区
秒表的 "时间刻度 "属性的差异
elapsedticks&pasted.ticks是秒表的属性,我认为应该相同. 如果它们是相同的,为什么他们应该给出不同的输出? 代码: Stopwatch spwt = Stopwatch.StartNew(); spwt.Stop(); Console.WriteLine(spwt.ElapsedTicks); Console.WriteLine(spwt.Elapsed.Ticks); 输出: 6 16 为什么观察到这种差异?不应该一样吗? 解决方案 参见: 注意 秒表刻度与dateTime.ticks不同. DateTime中的每个刻度.TICKS值代表一个100纳秒间隔. ElapsedTicks值中的每个刻度表示等于1秒除以频率的时间间隔.
4 2024-04-18
编程技术问答社区
用Stopwatch对.NET应用程序进行分析
似乎没有免费的* .NET性能介绍者可以逐行介绍.因此,我正在考虑使用秒表进行分析. *自由自由,即许可包括商业申请. 编辑:我想回应那些告诉我"买探险家"的人,但是如果我能花那么多钱,我会花在其他东西上.我试图说服我的老板,探索者是值得的,但没有太多运气.这个问题主要基于好奇心.我永远不会将秒表作为替代者的替代者. 我有一个小测试应用程序(用C#编写),该应用程序在每行使用秒表时测量性能差异.测试代码是: int n = 100; BigInteger f = 1; for (int i = n; i > 1; i--) { f *= i; } 这是完整的代码: http://pastebin.com/avbqmt32 我对每条代码都有一个秒表.这是我的" profiler".我也有一个秒表用于整个程序.这是我的" Profiler Profiler". i具有配置为发布模式的程序,任何CPU(在X64机器上)和优化. 当我禁用探查
4 2024-04-18
编程技术问答社区
精确测量线程中代码的执行时间(C#)。
我正在尝试在许多线程上尽可能准确地测量某些代码的执行时间,从而考虑上下文切换和线程停机时间.该应用程序在C#(VS 2008)中实现.示例: public void ThreadFunc () { // Some code here // Critical block #1 begins here long lTimestamp1 = Stopwatch.GetTimestamp (); CallComplex3rdPartyFunc (); // A long lTimestamp2 = Stopwatch.GetTimestamp (); // Critical block #1 ends here // Some code here // Critical block #2 begins here long lTimestamp3 = Stopwatch.GetTimestamp ();
14 2024-04-18
编程技术问答社区
.NET System.Diagnostics.Stopwatch问题(返回值太低)。
在我的计算机上,秒表返回值太低.例如,当我指定Thread.Sleep(1000)时200毫秒.该程序应该等待1秒.我还用ManualResetEvent.WaitOne(1000)进行了测试,并得到了相同的结果.框架2.0和3.0都赋予了这种奇怪的行为.我正在使用.NET Framework 3.5 Sp1. 运行Windows XP SP3 这是我的测试的结果(下面代码): 1000 ms for DateTime.Now.Ticks 0201 ms for Stopwatch.ElapsedTicks 0142 ms for Stopwatch.ElapsedMilliseconds 0139 ms for Stopwatch.ElapsedTicks after Reset 0264 ms for Stopwatch.ElapsedTicks setting ThreadAffinity 0151 ms for Stopwatch.ElapsedTicks settin
4 2024-04-18
编程技术问答社区
我应该在读取ElapsedMilliseconds之前调用Stop吗?
我可以在使用ElapsedMilliseconds上使用ElapsedMilliseconds在不打电话Stop的秒表上打电话给Start以来我可以获得经过的时间吗?我已经在互联网上搜索了很多东西,但是只看到了ElapsedMilliseconds Stop以后调用的示例.这个值是否在Stop的调用中填充了,还是总是正确的? 解决方案 您可以在秒表实例运行或停止时查询经过的属性,ElapsedMilliseConds和ElapsedTicks.秒表运行时,经过的时间属性稳步增加;停止实例时它们保持恒定. - 来自
8 2024-04-17
编程技术问答社区
如何用Stopwatch()显示分和秒
我还需要显示分钟,实际上我将此代码用于显示秒,但也需要分钟 TimeSpan ts = stopwatch.Elapsed; Console.WriteLine("File Generated: " + _writer.getBinaryFileName(filePath, Convert.ToInt32(logSelected)) + " in " + "{0}.{1:D2}" + "seconds", ts.Seconds, ts.Milliseconds/10 + "\n" ); 我该怎么做? 解决方案 您应该使用: ts.ToString("mm\\:ss\\.ff") 这将在一个时间间隔内给您几分钟,秒和一秒钟的一秒钟. 还请看一下 http://msdn.microsoft.com/en -us/library/ee372287.aspx 编辑: 好吧,如果您想分钟是最大的单位,则可以做以下操作: strin
14 2024-04-17
编程技术问答社区
如何使表格延迟显示
编辑:application.doevents();做到了.在此处找到: ui thread的强制gui更新 c#,winforms.我想将数字提高1个步骤,并在listView中显示这些增量,以便用户看到数字计数(例如,从10到15). 我有另一个按钮,当单击并使用相同的显示()时,它仅会增加1个.它可以正常工作并按预期更新显示. 我尝试了这些代码(在此处缩短以节省空间): (1) for (int i = 0; i { myInt++; await Task.Delay(300); display(); //forces screen refresh }); } (2) for (int i = 0; i
8 2024-04-17
编程技术问答社区
如何在数据网格视图列中动态地显示数字计时器(StopWatch)c#?
我有数据源是数据源. 我在datagridview中有两个列: 名称,时间 加载数据杂志后,我想添加一个名为"持续时间"的新列,即计时器列,即基于时间,持续列应显示秒表,该秒表具有当前时间的时间间隔. 如何使持续列秒表秒表以每秒钟的数字时钟(例如数字时钟)继续计时器? 解决方案 您可以将字符串列添加到DataTable中,并将其用作持续列.然后,您可以订阅计时器的Tick事件,将其设置为1000,并显示持续时间列中计数计时器的结果: void timer_Tick(object sender, EventArgs e) { foreach( DataRow row in YourDataTable.Rows) { var diff = row.Field("DateTimeColumn").Subtract(DateTime.Now); if(diff.TotalSeconds>0)
10 2024-04-16
编程技术问答社区