Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以最小的时间分辨率显示指定功能的精确启动和停止时间_C#_Datetime_Time - Fatal编程技术网

C# 如何以最小的时间分辨率显示指定功能的精确启动和停止时间

C# 如何以最小的时间分辨率显示指定功能的精确启动和停止时间,c#,datetime,time,C#,Datetime,Time,我试图获得接口的确切开始和停止时间。GetIPv4Statistics.BytesReceived 我使用秒表获取DateTime.Now.ToStringHHmmss所需的时间 我认为timeEndGetStatisticAndConvert是时间,也包括转换为字符串的时间 但结果是 转换时间为00:00:010 开始时间:23:04:12:134 接收字节:700116647 停止:23:04:12:134 启动和停止时间相同,分辨率为1ms 那么秒表显示错误的时间间隔 DateTime.N

我试图获得接口的确切开始和停止时间。GetIPv4Statistics.BytesReceived

我使用秒表获取DateTime.Now.ToStringHHmmss所需的时间

我认为timeEndGetStatisticAndConvert是时间,也包括转换为字符串的时间

但结果是

转换时间为00:00:010

开始时间:23:04:12:134

接收字节:700116647

停止:23:04:12:134

启动和停止时间相同,分辨率为1ms

那么秒表显示错误的时间间隔

DateTime.Now.ToString的功能与想象中的不同

或者当我们显示DateTime.Now.ToString的结果时,它首先获取时间,然后只转换为字符串?很明显,这就是答案,很抱歉这个逻辑错误

顺便说一下,我核实一下

Stopwatch timer = Stopwatch.StartNew();
var currentByteReceive1 = interfaces.GetIPv4Statistics().BytesReceived;
timer.Stop();
是0毫秒

所以我想知道在C语言中,可以用来显示当前时间的最小时间分辨率是什么,以及如何显示它? 最后是interfaces.GetIPv4Statistics.BytesReceived的确切启动和停止时间;这表明

矛盾发生在这里!!! 真正的功能启动时间应该是10毫秒后,我得到的第一次,但不是之前!! 然后我的开始时间会比结束时间大

//variable name change because the real situation
//should be Add POSITIVE timespan.Milliseconds but not Add NEGATIVE
var timeStartGetStatisticAndConvert = DateTime.Now.AddMilliseconds(-(timespan.Milliseconds)).ToString("HH:mm:ss:fff");
var currentByteReceive = interfaces.GetIPv4Statistics().BytesReceived;
var timeEndGetStatistic = DateTime.Now.ToString("HH:mm:ss:fff"); 

Console.WriteLine("Start:\t{0}\nBytes Received:\t{1}\nStop:\t{2}",
    timeStartGetStatisticAndConvert, currentByteReceive, timeEndGetStatistic);
转换时间为00:00:010

//如果更改标志,开始时间:23:04:14:124

开始时间:23:04:12:124

接收字节:700116647

停止:23:04:12:134


谢谢。我将在另一篇文章中询问矛盾部分。

据我所知,DateTime.Ticks提供了C语言中最小的时间分辨率。除此之外,您还需要Windows API提供的高分辨率计时器;它们通常用于需要非常高精度计时器的媒体播放器。

这看起来非常复杂。这可能是因为您为DateTime选择的格式HH:mm:ss:fff

interfaces.GetIPv4 Statistics.BytesReceived意味着“接口已经初始化,数据已经存在,我相信就是BytesReceived

基本上,你想要的是:

var start = DateTime.Now;
if (NetworkInterface.GetIsNetworkAvailable())
{
    interfaces = NetworkInterface.GetAllNetworkInterfaces()[0];
}
var currentByteReceive = interfaces.GetIPv4Statistics().BytesReceived;
Console.WriteLine("Timespan: {0}", DateTime.Now - start);

如果,也就是说,我理解您要做的事情。

尝试使用已用属性或勾选属性

Stopwatch timer = Stopwatch.StartNew();
            var currentByteReceive1 = interfaces.GetIPv4Statistics().BytesReceived;
            timer.Stop();
            Console.WriteLine(timer.Elapsed);

它给了我这个00:00:00.0026059 2,6毫秒。

秒表非常精确,比两次存储Now值更精确。为什么你认为时间测量是错误的?记住,它只能处理蜱虫;任何比一滴答快100纳秒的东西;在相当多的情况下可能发生的事情输出为零。@varocarbas 1 ticks始终等于100纳秒,或者它与微处理器速度有关?谢谢。滴答声的定义我认为是恒定的。但是秒表有特殊的滴答声,这可能与CPU有关。我想我的问题与这两篇文章非常相似,而且。感谢您提供的关于tick是C中最小时间单位的信息。不,我不想要时间跨度,但我想要var currentByteReceive=interfaces.GetIPv4 Statistics.BytesReceived的最小时间分辨率中的确切开始和停止时间;不管怎样,谢谢~好的。量程只能解析到最接近的毫秒。DateTime.Now-start.totalmillizes;-如果有帮助的话。是否有实现DateTime.Ticks的提示,以var currentByteReceive=interfaces.GetIPv4Statistics.BytesReceived;的最小时间分辨率获取准确的开始和停止时间;?谢谢秒表可以提供最小的0.1微秒的结果,顺便说一句,我想要的是开始和停止时间,但不是持续时间,谢谢~
Stopwatch timer = Stopwatch.StartNew();
            var currentByteReceive1 = interfaces.GetIPv4Statistics().BytesReceived;
            timer.Stop();
            Console.WriteLine(timer.Elapsed);