对于以下场景,什么应该是一个好的设计?

时间:2012-02-14 13:10:26

标签: oop design-patterns kinect software-design

我们正在记录各种身体部位的位置。我们的硬件(Microsoft Kinect)提供多达20个人体关节的位置。它以大约30 fps的速度提供数据。位置还包括该特定关节的X,Y和Z坐标。一个特定的手势约3-4秒,所以没有。框架的范围从80到120.我们的问题是存储和检索此数据并进行处理。我们的术语如下:

框架:所有正在考虑的关节的快照 示例:特定手势的所有帧的集合

问题是我们正在试验,我们不知道项目中要使用多少个关节数据。所以它没有修复。

现在考虑一个特殊问题,即存储数据。使用以下方法生成SQL查询。 http://pastebin.com/ga114cQm

正如您所看到的,问题是代码重复很多。在我们必须预处理数据的另一个问题中,同样的事情发生了。尽管只预处理了6个关节,但该方法的长度太长。 看看这里:http://pastebin.com/JVKWNDmZ

虽然它有效但我不喜欢它。另外,如果我们使用封装来填充对象而不是直接使用数组,那么会有多少性能?因为这是一个实时的手势识别系统,我们承受不起很多延迟。

如果问题不是很明确,请告诉我你不理解的部分。由于我不想要一个非常大的问题,我试图总结整个问题。

1 个答案:

答案 0 :(得分:0)

如果问题只是创建一个SQL INSERT指令来将值存储到数据库中,那么您的代码就没有意义了。

您可以在db中创建存储过程,在代码中设置参数并调用过程,如:

SqlCommand cmd  = new SqlCommand("InsertKinectData", conn);
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@SkeletonX", sd.Position.X));
//...
cmd.ExecuteNonQuery();

要优化速度,请保持数据库连接处于打开状态,不要重新创建SqlCommand或参数,只需在参数到达时立即使用新值设置参数,然后立即调用SP。 / p>