我需要找到一个瓶颈,并且需要准确地测量时间.
以下代码段是衡量性能的最佳方法吗?
DateTime startTime = DateTime.Now;
// Some execution process
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
Run Code Online (Sandbox Code Playgroud) 是否可以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) 一位顾问昨天来了,不知怎的,字符串的主题出现了.他提到他已经注意到,对于长度小于一定长度的字符串,Contains实际上比它更快StartsWith.我必须用自己的两只眼睛看到它,所以我写了一个小应用程序,当然,Contains更快!
这怎么可能?
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MinValue;
string str = "Hello there";
start = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
str.Contains("H");
}
end = DateTime.Now;
Console.WriteLine("{0}ms using Contains", end.Subtract(start).Milliseconds);
start = DateTime.Now;
for (int i = 0; i < 10000000; i++)
{
str.StartsWith("H");
}
end = DateTime.Now;
Console.WriteLine("{0}ms using StartsWith", end.Subtract(start).Milliseconds);
Run Code Online (Sandbox Code Playgroud)
输出:
726ms using Contains
865ms using StartsWith
Run Code Online (Sandbox Code Playgroud)
我也尝试过更长的琴弦!
是否有C#属性(用于方法)来计算此方法的执行时间?还有另外一种方法吗?
我需要计算系统运行的持续时间.我在c#中的系统.我已经设定:
DateTime startRunningProg = Date.Time.Now("o");
Run Code Online (Sandbox Code Playgroud)
经过几个过程.
我设置 :
DateTime endRunningProg = Date.Time.Now("o");
Run Code Online (Sandbox Code Playgroud)
如何计算以毫秒或秒为单位运行的系统的持续时间.
在C#中,如果我DateTime.UtcNow在同一个进程中调用两次,是否可以保证第二次调用的时间晚于第一次调用?
背景是我们有一个应用程序通过调用记录每个任务的开始时间和结束时间DateTime.UtcNow,对于一个任务,我们观察到结束时间甚至早于开始时间.对于cource,我们的应用程序足够复杂,因此在深入调查之前,我不能排除其他可能性,但至少想要了解它是否可能在以后调用DateTime.UtcNow返回更早的时间.
提前致谢.
我想测试一个方法运行需要多长时间,我想知道时间跨度是否是最佳方式?我不想记录方法的开始和结束,因为我听说由于创建和更新现有日志文件所花费的时间,日志记录将无法准确读取时间.如果时间跨度不是最好的方法,那么什么是一个好方法呢?
我已经用 any 检查了嵌套循环的不同性能。但是 Distinct Method 比嵌套循环快得多。
var customers = new List<Customer>();
for (var i = 1; i <= 100000; i++)
{
var id = (int)Math.Floor((decimal)i / 10);
var customer = new Customer()
{
FirstName = $"Name {i}",
ID = id,
LastName = $"Last {i}"
};
customers.Add(customer);
}
System.Console.WriteLine($"Outer Loop start :{DateTime.UtcNow}");
var ids = new List<int>();
customers.ForEach(_=> {
ids.Add(_.ID);
});
var uniqueIds = ids.Distinct();
System.Console.WriteLine($"Outer Loop End :{DateTime.UtcNow}");
System.Console.WriteLine($"Nested Loop start :{DateTime.UtcNow}");
var oids = new List<int>();
customers.ForEach(_ => { …Run Code Online (Sandbox Code Playgroud) 我在一个方法中尝试了以下代码:
Trace.Write("START "+Datetime.now);
//DATABASE METHOD CALL
SaveData();
Trace.Write("END "+Datetime.now);
Run Code Online (Sandbox Code Playgroud)
我output window手动计算时间.
如何使用stopwatch(启动/重置/停止)来获得正确的执行时间?
c# ×10
.net ×5
performance ×4
datetime ×3
asp.net-mvc ×1
attributes ×1
linq ×1
optimization ×1
stopwatch ×1
string ×1
time ×1
timer ×1
timespan ×1
timestamp ×1