我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
可能重复:
如何测量函数运行的时间?
我有一个I/O计时方法,可以将数据从一个位置复制到另一个位置.什么是计算执行时间的最佳和最实际的方法?Thread?Timer?Stopwatch?还有其他方法吗?我想要最精确的一个,尽可能简短.
在集合上使用Linq,以下代码行之间有什么区别?
if(!coll.Any(i => i.Value))
Run Code Online (Sandbox Code Playgroud)
和
if(!coll.Exists(i => i.Value))
Run Code Online (Sandbox Code Playgroud)
更新1
当我反汇编.Exists它看起来没有代码.
更新2
任何人都知道为什么这个没有代码?
我想知道程序/功能/订单需要多长时间才能完成测试.
这是我做的,但我的方法是错误的'因为如果秒的差异为0则无法返回经过的毫秒:
请注意,睡眠值为500毫秒,因此经过的秒数为0,则无法返回毫秒数.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
Run Code Online (Sandbox Code Playgroud)
有人能告诉我更好的方法吗?也许有一个TimeSpan?
解决方案:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, …Run Code Online (Sandbox Code Playgroud) 我想跟踪我的代码的性能,所以我使用了存储开始和结束时间System.DateTime.Now.我将两者之间的差异作为执行代码的时间.
我注意到差异似乎并不准确.所以我尝试使用一个Stopwatch对象.事实证明,这更加准确.
谁能告诉我为什么Stopwatch比计算开始和结束时间之间的差异更准确System.DateTime.Now?
顺便说一句,我不是说百分之十.我得到了大约15-20%的差异.
显然我能做到DateTime.Now.After- DateTime.Now.Before但必须有更复杂的东西.
任何提示赞赏.
是否可以Environment.TickCount用来计算时间跨度?
int start = Environment.TickCount;
// Do stuff
int duration = Environment.TickCount - start;
Console.WriteLine("That took " + duration " ms");
Run Code Online (Sandbox Code Playgroud)
因为TickCount已签名并将在25天后翻转(所有32位需要50天,但如果你想对数学有任何意义,你必须废弃已签名的位),看起来它太冒险了.
我正在使用DateTime.Now.这是最好的方法吗?
DateTime start = DateTime.Now;
// Do stuff
TimeSpan duration = DateTime.Now - start;
Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");
Run Code Online (Sandbox Code Playgroud) 可能重复:
DateTime.Now是测量函数性能的最佳方法吗?
秒表与使用System.DateTime.Now进行计时事件
我的代码需要尽可能快地运行.为了能够记录执行时间,我使用了秒表类.我怀疑,秒表可能会以糟糕的方式影响表现.也许使用DateTime差异可能更有效?
你认为哪一个有更好的表现?
Stopwatch sw = new Stopwatch();
sw.Start();
int a = 5;
// Critical lines of code
long elapsedMs = se.Elapsed.TotalMilliseconds;
Run Code Online (Sandbox Code Playgroud)
要么
DateTime startDate = DateTime.Now;
int a = 5;
// Critical lines of code
long elapsedMs = DateTime.Now.Subtract(startDate).TotalMilleseconds;
Run Code Online (Sandbox Code Playgroud) 我正在使用DateTime对一行C#代码进行一些真正的快速和脏的基准测试:
long lStart = DateTime.Now.Ticks;
// do something
long lFinish = DateTime.Now.Ticks;
Run Code Online (Sandbox Code Playgroud)
问题在于结果:
Start Time [633679466564559902] Finish Time [633679466564559902] Start Time [633679466564569917] Finish Time [633679466564569917] Start Time [633679466564579932] Finish Time [633679466564579932]
...等等.
鉴于开始和结束时间相同,Ticks显然不够精细.
那么,我怎样才能更好地衡量绩效呢?
我在这些之间完全感到困惑4.ElapsedMilliseconds(long),ElapsedTicks(long),Elapsed.TotalMilliseconds(double)和Elapsed.Milliseconds(int)之间有什么区别?
我有一个功能
{
Stopwatch sw = new Stopwatch();
sw.Start();
MyTimeConsumingAction();
sw.Stop();
sw.//what?
}
Run Code Online (Sandbox Code Playgroud)
如何从秒表对象的已用属性(以毫秒为单位)获取长时间运行的进程所消耗的正确时间?
编辑:我试过msdn文档,但它没有详细说明..