我有一个Datapoint[] file = new Datapoint[2592000]数组。这个数组充满了时间戳和随机值。创建它们需要花费我 2 秒的时间。但是在另一个函数中,prepareData();我正在为另一个 Array 准备 240 个值TempBuffer。在prepareData()函数中,我正在搜索file数组中的匹配值。如果我找不到任何我取时间戳并将值设置为 0 否则我取找到的值 + 相同的时间戳。
该函数如下所示:
public void prepareData()
{
stopWatch.Reset();
stopWatch.Start();
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
for (double i = unixTimestamp; unixTimestamp - 240 < i; i--)
{
bool exists = true;
if (exists != (Array.Exists(file, element => element.XValue == i)))
{
TempBuffer = TempBuffer.Skip(1).Concat(new DataPoint[] { new DataPoint(UnixTODateTime(i).ToOADate(), 0) }).ToArray();
}
else
{
DataPoint point = Array.Find(file, element => element.XValue == i);
TempBuffer = TempBuffer.Skip(1).Concat(new DataPoint[] { new DataPoint(UnixTODateTime(i).ToOADate(), point.YValues) }).ToArray();
}
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
}
现在的问题是file函数需要 40 秒的(2'592'000) 中的数据量!对于 10'000 等较小的数量,这不是问题,并且可以正常快速地工作。但是一旦我将file大小设置为我喜欢的 2'592'000 点,CPU 就会被推到 99% 的性能并且该功能需要的时间太长。
TempBuffer 样本值:
X = UnixTimeStamp 转换为 DateTime 和 DateTime 转换为 AODate
{X=43285.611087963, Y=23}
文件样本值:
X = Unixtimestamp
{X=1530698090, Y=24}
将临时缓冲区值转换为 AODate 很重要,因为临时缓冲区数组内的数据显示在 mschart 中。
有没有办法改进我的代码,以便我获得更好的性能?
婷婷同学_
米脂
相关分类