- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
到目前为止,我使用 DateTime.Now
获取时间戳,但我注意到,如果您在循环中打印 DateTime.Now
,您会看到它以离散方式递增跳跃约。 15 毫秒。但是对于我的应用程序中的某些场景,我需要尽可能获得最准确的时间戳,最好是 tick (=100 ns) 精度。有任何想法吗?
更新:
显然,StopWatch
/QueryPerformanceCounter
是可行的方法,但它只能用于测量时间,所以我在考虑调用 DateTime.Now
当应用程序启动时,StopWatch
运行,然后将 StopWatch
的耗时添加到 DateTime.Now 返回的初始值
。至少应该给我准确的相对时间戳,对吧?你怎么看那个(黑客攻击)?
注意:
StopWatch.ElapsedTicks
不同于 StopWatch.Elapsed.Ticks
!我使用前者假设 1 tick = 100 ns,但在这种情况下 1 tick = 1/StopWatch.Frequency
。因此,要获得与 DateTime 等效的刻度,请使用 StopWatch.Elapsed.Ticks
。我刚刚通过艰难的方式学到了这一点。
注意 2:
使用秒表方法,我注意到它与实时时间不同步。大约 10 小时后,它领先了 5 秒。所以我想人们必须每隔 X 左右重新同步一次,其中 X 可能是 1 小时、30 分钟、15 分钟等。我不确定重新同步的最佳时间跨度是多少,因为每次重新同步都会改变偏移量,这可能是最多 20 毫秒。
最佳答案
DateTime.Now
读取的系统时钟值仅每 15 毫秒左右(或在某些系统上为 10 毫秒)更新一次,这就是时间围绕这些时间间隔进行量化的原因。由于您的代码在多线程操作系统中运行,因此会产生额外的量化效果,因此在某些情况下您的应用程序不是“事件的”,因此无法测量实际的当前时间。
由于您正在寻找一个超精确的时间戳值(而不是仅仅为任意持续时间计时),Stopwatch
类本身不会满足您的需要。我认为您必须自己使用某种 DateTime
/Stopwatch
混合来执行此操作。当您的应用程序启动时,您将存储当前的 DateTime.UtcNow
值(即应用程序启动时的粗分辨率时间),然后还启动一个 Stopwatch
对象,如下所示:
DateTime _starttime = DateTime.UtcNow;
Stopwatch _stopwatch = Stopwatch.StartNew();
然后,每当你需要一个高分辨率的 DateTime
值时,你会像这样得到它:
DateTime highresDT = _starttime.AddTicks(_stopwatch.Elapsed.Ticks);
您可能还需要定期重置 _starttime 和 _stopwatch,以防止结果时间与系统时间过于不同步(尽管我不确定这是否真的会发生,而且需要很长时间才能恢复)无论如何都会发生)。
更新:由于秒表似乎确实与系统时间不同步(每小时多达半秒),我认为这是有道理的根据检查时间的调用之间耗时量重置混合 DateTime
类:
public class HiResDateTime
{
private static DateTime _startTime;
private static Stopwatch _stopWatch = null;
private static TimeSpan _maxIdle =
TimeSpan.FromSeconds(10);
public static DateTime UtcNow
{
get
{
if ((_stopWatch == null) ||
(_startTime.Add(_maxIdle) < DateTime.UtcNow))
{
Reset();
}
return _startTime.AddTicks(_stopWatch.Elapsed.Ticks);
}
}
private static void Reset()
{
_startTime = DateTime.UtcNow;
_stopWatch = Stopwatch.StartNew();
}
}
如果您以固定的时间间隔(比如每隔一小时或其他时间)重置混合计时器,您可能会冒着将时间调回到上次读取时间之前的风险,有点像微型夏令时问题。
关于c# - 如何在 .NET/C# 中获取刻度精度的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416139/
如何使用 plot() 在 XY 图中绘制第二条线,以不同的比例(如本例(紫色线))? 第一行(红色)我的 R 代码是这样的: p <- sqlQuery(ch,"SELECT wl,param1 F
我正在寻找一种将折线图步骤设置为仅完整数字步骤的方法,例如 1,2,3,4,5..... 目前它看起来像这样: 这些是我的选择。我搜索了很多但找不到解决方案。 let options = {
我的问题是如何将 Y 轴刻度的间隔从 0.2 更改为 0.1?我已经尝试了一切,但我很困!帖子底部堆叠条形图的图片 dpi=600 #pixels per square inch A <- c(
有没有办法根据当前数据集在 D3 轴上动态设置 ticks。我遇到的问题是我的时间范围(x 轴)可能变化很大。对于一些数据集来说,它是几年的值(value),对于其他数据集来说是几个月,在某些情况下只
我已经使用默认参数创建了一个 dojo 蜘蛛图。我需要隐藏轴标签(刻度上的数据值,而不是轴标题)。 我已经尝试过'ticks: false',但是它不适用于蜘蛛图。 require(["dojo/_b
有没有一种简单的方法可以在绘图 Axis 上获得自定义缩放比例? 例如,semilogy 函数提供 {x, log10(y)} 缩放比例,这样就可以自动放大/缩小并自动调整刻度和标签。我想对 {x,
如何修改图形和图表的 y Axis 刻度?我想要这样的东西:my_figure.y_range.end = my_figure.y_range.end * 1.3 所以我想要更高一点的y轴。谢谢! 最
我正在尝试使用 recharts 添加图表一些货币的最新汇率。数据显示正确,但图表始终从 0 开始并略高于最大值。 图表是正确的,但它不需要从 0 开始,因为这样做,它几乎是一条线。 这是图表的图片:
我有一个 SWT Scale 小部件,我需要在刻度上的刻度上添加标签。 有没有办法做到这一点?也许在 slider 小部件上? 谢谢 最佳答案 这可能不是您所要求的,但您可以在 Scale 小部件旁边
这是一个从 .xlsx 文件中读取数据并利用 Plotly 库绘制气泡图的程序。这是 .xlsx 文件的原始数据: 1991 1992 1993 1994 1995
我这里有一个代码笔 - https://codepen.io/anon/pen/yvgJKB 我有一个简单的堆积条形图。 我想将其制作成一个组件,因此我需要传入值以使其可重用 x 缩放函数返回d.da
让我们看一个基本的演示折线图: jsfiddle $(function () { $('#container').highcharts({ //all the code there 我想强制
是否可以在 t-sql 中获得像 DateTime.Ticks 这样的 C# 内容? 感谢帮助 最佳答案 您不太可能从 SQL 中获得与 DateTime.Ticks 相同的精度,因为 SQL 不能以
我正在使用 Bokeh 生成散点图,每个 X 值具有不同的 Y 值。当 Bokeh 生成绘图时,它会根据绘制的值的数量自动填充 x 轴间距。我希望 x 轴上的所有值均匀分布,无论单个数据点的数量如何。
我使用下面的代码使用谷歌图表生成折线图 google.charts.load('current', {packages: ['corechart', 'line']});
我正在尝试在 d3 中构建堆积条形图。 这是我的 jsfiddle: http://jsfiddle.net/maneesha/gwjkgruk/4/ 我正在尝试修复它,使 y 轴从零开始。 我认为这
我有一个 d3 时间刻度图表。目前,轴刻度为每个数据对象呈现一个日期。例如,数据的范围可以是 1 天的数据、1 个月内 2 周的数据、5 个月的数据甚至更多。 理想情况下,我们希望显示带有周数的刻度,
当使用“Cassic”折线图时,我可以为 hAxis 分配刻度,还有这样的格式和标题: var options = { hAxis: { format:'h a', title
我的累积折线图没有正确构建 yScale。 给定要构建图表的数据: var data = [{ key: "Page view", values: [ ["2013-07-01 00:
在 y 轴上使用两个具有正常整数值的 DateAxisSeries(x 轴)我的 jqPlot 将 y 刻度呈现两次。 像这样: 2| 2| 1| 1| 0|_____________________
我是一名优秀的程序员,十分优秀!