Каким должен быть хороший дизайн для следующего сценария? - PullRequest
0 голосов
/ 14 февраля 2012

Мы записываем положения различных частей тела.Наше оборудование (Microsoft Kinect) позволяет разместить до 20 суставов человеческого тела.И это дает данные около 30 кадров в секунду.Также позиция включает в себя координаты X, Y и Z этого конкретного соединения.Конкретный жест составляет около 3-4 секунд, поэтому нет.количество кадров варьируется от 80 до 120. Наша задача - хранить и извлекать эти данные и обрабатывать их.Наша терминология такова:

Кадр: снимок всех рассматриваемых соединений Пример: Сбор всех кадров для конкретного жеста

Проблема в том, что мы экспериментируем и не знаем, какданные многих стыков, которые будут использоваться в проекте.Так что это не исправлено.

Теперь рассмотрим конкретную проблему, скажем, хранения данных.Запрос SQL генерируется с использованием следующего метода.http://pastebin.com/ga114cQm

Как видите, проблема в том, что много повторений кода.В другой проблеме, когда мы должны предварительно обработать данные, происходит то же самое.Хотя только 6 соединений предварительно обработаны, длина метода слишком велика.Посмотрите здесь: http://pastebin.com/JVKWNDmZ

Хотя это работает, мне это не нравится.Кроме того, если мы будем использовать инкапсуляцию, например, заполнение объектов, вместо того, чтобы напрямую использовать массивы, насколько сильно снизится производительность?Поскольку это система распознавания жестов в реальном времени, мы не можем позволить себе много задержек.

Если Вопрос не очень понятен, скажите, пожалуйста, какую часть вы не поняли.Поскольку я не хотел очень большой вопрос, я попытался обобщить всю проблему.

1 Ответ

0 голосов
/ 14 февраля 2012

Если проблема заключается только в том, чтобы создать инструкцию SQL INSERT для сохранения значений в базе данных, то ваш код не имеет смысла.

Вы можете создать хранимую процедуру в БД, установить параметры в коде и вызвать процедуру, например:

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

Чтобы оптимизировать скорость, оставьте соединение дБ открытым, не создавайте заново ни SqlCommand, ни параметров, просто установите параметры с новыми значениями, как только они появятся, и сразу после этого вызовите SP.

...