Статья: Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008

Проведено сравнение традиционной технологии обработки массива данных с технологией LINQ. Представлены исходные коды примеров на языке программирования Microsoft Visual Basic 2008.

Введение

В мире существует целый ряд высококлассных специализированных программных пакетов для обработки данных, таких как MathCAD или STATISTICA, но они, как правило, являются дорогими коммерческими продуктами и использование их расчетных библиотек в программах сторонних разработчиков затруднено или невозможно. Как правило, в таких программах сложно автоматизировать ввод исходных данных, поступающих от измерительных приборов, подключенных к персональному компьютеру. В связи с этим многие ученые самостоятельно разрабатывают программы для обработки данных.

В настоящее время лидирующую позицию в мире средств разработки программного обеспечения занимает корпорация Microsoft со своей платформой .NET Framework и средой разработки Visual Studio. Платформа .NET Framework является средой исполнения для программ, написанных на различных языках программирования. Наиболее популярными языками программирования под .NET Framework являются C#, Visual Basic, C++, Delphi, Nemerle, Python и др.

Еще до недавнего времени программисты применяли такие же алгоритмы обработки данных, как и 20 лет назад. К примеру, для вычисления суммы положительных элементов вектора программисту, кодирующему на Visual Basic 2005, приходилось в цикле последовательно проверять все элементы массива и складывать отвечающие условию Элемент > 0. В итоге, если условия отбора данных были сложные, алгоритм представлял собой многоэтажную конструкцию, состоящую из операторов цикла For…Next или Do…Loop (зачастую вложенных) и операторов условного перехода IF…EndIF и Select…Case. При этом в особо сложных случаях для выхода из внутреннего цикла применяли оператор GoTo, что так же не упрощало понимание кода.

Ситуация изменилась с выходом в свет технологии интегрированных в язык запросов LINQ (Language Integrated Query) [1], появившейся в составе новой платформы корпорации Microsoft – .NET Framework 3.5 в конце 2007 г. (предварительная версия была доступна с конца 2006 г.). Язык запросов позволяет упросить процедуру выборки необходимых данных за счет использования структурированных запросов специального формата.

Запросы могут применяться к объектам, которые реализуют интерфейсы IEnumerable<(Of <(T) или IQueryable<(Of <(T>)>)[2]. Следовательно, проводить поиск можно в массивах (Array), коллекциях (Collection), словарях (Dictionary), списках (List) и т.д. Кроме того, LINQ позволяет обеспечивать взаимодействие с СУБД Microsoft SQL Server 2005 (LINQ to SQL), с объектом DataSet (LINQ to DataSet), с данными XML (LINQ to XML) и Entities (LINQ to Entities) [3].

Сравнение технологий

Для сравнения традиционного подхода и подхода с использованием технологии LINQ была написана тестовая программа. Автор сравнивал две технологии обработки данных, решая следующие задачи:

Выборка положительных элементов из исходного множества.

Выборка положительных элементов и ранжирование их по возрастанию.

Возведение в квадрат всех элементов исходного множества.

Отбор элементов исходного множества без повторов элементов с одинаковыми значениями.

Вычисление количества отрицательных элементов в исходном множестве.

Вычисление среднего значения элементов исходного множества.

Вычисление суммы элементов исходного множества.

Нахождение элемента исходного массива с максимальным значением.

Было проведено сравнение быстродействия обеих технологий для каждого алгоритма.

Перед рассмотрением непосредственно самих алгоритмов обратим внимание на ряд особенностей:

В качестве исходного множества использован один раз автоматически сгенерированный одномерный массив целочисленных элементов. Массив был сериализован в бинарный файл на жесткий диск и перед каждым тестом данные десериализовались в оперативную память. Количество элементов массива – .

Ни один из приведенных алгоритмов не изменяет массив исходных данных. Это особенно имеет значение, в случае, когда данные поступают и обрабатываются непрерывно, в режиме псевдореального времени. Там где это было необходимо, данные перемещали во временный типизированный список List(of Integer).

В примерах традиционных алгоритмов обработки данных специально используется цикл For…Next, так как он быстрее работает с массивами структурных типов данных (Integer, Double, Long), чем более удобный в использовании, но менее производительный цикл For…Each.

Исследования проводили на рабочей станции со следующей конфигурацией: процессор Intel Core2Duo E6550-2,3ГГц/4096 МБ ОЗУ/ОС MS Windows Vista Ultimate с отключенным “файлом подкачки”.

Все алгоритмы написаны в бесплатно распространяемой интегрированной среде разработки Microsoft Visual Basic 2008 Express, которую можно свободно скачать с официального сайта корпорации Microsoft.

Реализация алгоритмов

Выборка положительных элементов из исходного множества

Традиционный подход

Dim Result As New List(Of Integer)

For i As Integer = 0 To UBound(Vector)

If Vector(i) > 0 Then Result.Add(Vector(i))

Next

--> ЧИТАТЬ ПОЛНОСТЬЮ <--

К-во Просмотров: 133
Бесплатно скачать Статья: Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008