我试图获得interfaces.GetIPv4Statistics().BytesReceived;
的确切开始和停止时间。
NetworkInterface interfaces;
public Form1()
{
InitializeComponent();
if (NetworkInterface.GetIsNetworkAvailable())
{
interfaces = NetworkInterface.GetAllNetworkInterfaces()[0];
}
Stopwatch timer = Stopwatch.StartNew();
var time1 = DateTime.Now.ToString("HH:mm:ss:fff");
//timer stop function take how much time? how if not ignored?
timer.Stop();
TimeSpan timespan = timer.Elapsed;
//10ms for the conversion
Console.WriteLine("Convert take time {0:00}:{1:00}:{2:000}",
timespan.Minutes, timespan.Seconds, timespan.Milliseconds);
var timeStartGetStatistic = DateTime.Now.ToString("HH:mm:ss:fff");
var currentByteReceive = interfaces.GetIPv4Statistics().BytesReceived;
var timeEndGetStatisticAndConvert = DateTime.Now.ToString("HH:mm:ss:fff");
Console.WriteLine("Start:\t{0}\nBytes Received:\t{1}\nStop:\t{2}",
timeStartGetStatistic, currentByteReceive, timeEndGetStatisticAndConvert);
我使用秒表来获取DateTime.Now.ToString("HHmmss");
我认为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();
0ms ....
最后显示interfaces.GetIPv4Statistics().BytesReceived;
的确切开始和停止时间由
实际功能开始时间应为 10ms后我第一次但不是 !! 然后我的开始时间大于结束时间!!!
//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
感谢。我将在另一篇文章中提出矛盾部分。
答案 0 :(得分:0)
据我所知,DateTime.Ticks提供了C#中最小的时间分辨率。除此之外,您还需要Windows API提供的高分辨率计时器;它们通常用于媒体播放器(需要非常高精度的计时器)。
答案 1 :(得分:0)
看起来真的很复杂。这可能是因为您为 DateTime (“HH:mm:ss:fff”)选择的格式。
interfaces.GetIPv4Statistics().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);
如果,就是说,我理解你要做的事情。
答案 2 :(得分:0)
尝试使用Elapsed或Tick propertie
Stopwatch timer = Stopwatch.StartNew();
var currentByteReceive1 = interfaces.GetIPv4Statistics().BytesReceived;
timer.Stop();
Console.WriteLine(timer.Elapsed);
它给了我00:00:00.0026059(2,6毫秒)