【发布时间】:2013-02-11 01:21:19
【问题描述】:
我正在使用 MS Kinect 来记录和回放颜色、深度和骨架输出。
我正在使用BinaryWriter 将此信息写入文件。该过程运行良好,但文件大小在短时间内变得巨大(5 分钟内约 15 GB)。自然地,当调用“重播此信息”时,加载此大小的文件需要一段时间才能开始播放。而需要是能够记录大约1小时的输出。按照这个速度,到录制结束时文件将是 180 GB,我猜这将太多而无法加载和开始即时播放。
一种可能的解决方案是检测文件大小何时达到 1 GB,然后创建另一个文件并不断重复此过程。这样我最终会得到几个 1 GB 的文件来录制 1 小时。对于重播,我将一一加载它们。
在开始执行此操作之前,我必须记住 Kinect 输出会不断流入。因此,创建新文件可能会花费大量时间开销。
问题:
.NET 中现有的文件写入 API 是否提供了一种自动检测文件大小和创建另一个文件等的方法?
每隔几秒创建新文件是否会产生很大的开销?由于我希望记录的信息以每秒 30 帧的速度流入,这可能意味着在创建文件时会丢失一些信息等等。
我认为我需要高精度作为研究应用。我刚刚做了另一个测试 30 分钟的深度,色彩捕捉以接近 98 Gb 的文件结束。 使用此代码(来自 Kinect.Toolbox)需要永远播放 - {
while (reader.BaseStream.Position != reader.BaseStream.Length)
{
KinectRecordOptions header = (KinectRecordOptions)reader.ReadInt32();
switch (header)
{
case KinectRecordOptions.Color:
colorReplay.AddFrame(reader);
break;
case KinectRecordOptions.Depth:
depthReplay.AddFrame(reader);
break;
case KinectRecordOptions.Skeletons:
skeletonReplay.AddFrame(reader);
break;
}
}
}
【问题讨论】:
-
您如何访问该文件?打开文件并开始读取文件的性能不应取决于文件大小。
-
你想播放什么?只是骨骼的视觉表示? 2D/3D?还是只是图像?
-
我正在尝试播放的是深度和彩色图像。
-
Daniel 我认为在用户界面上显示深度和颜色帧方面 - 读取大文件确实很重要。 " while (reader.BaseStream.Position != reader.BaseStream.Length) "