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



Скачать 88.01 Kb.
Дата25.07.2014
Размер88.01 Kb.
ТипДокументы
УДК 004.021:004.67
ИСПОЛЬЗОВАНИЕ ИНТЕГРИРОВАННЫХ В ЯЗЫК ЗАПРОСОВ (LINQ) ПРИ ОБРАБОТКЕ МАССИВА ДАННЫХ В MICROSOFT VISUAL BASIC 2008
Асп. Волошин С. Б.*

(sergey_walsh@hotmail.com)

Кафедра теории и автоматизации

металлургических процессов и печей.

Северо-Кавказский горно-металлургический институт

(государственный технологический университет)
Проведено сравнение традиционной технологии обработки массива данных с технологией 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 была написана тестовая программа. Автор сравнивал две технологии обработки данных, решая следующие задачи:



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

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

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

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

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

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

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

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

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

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



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

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

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

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

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


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

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

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

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


    1. LINQ подход

Dim Query = From element In Vector Where element >= 0 _

Select element



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

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

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


Result.Sort()

    1. LINQ подход

Dim Query = From element In Vector Where element >= 0 _

Select element Order By element



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

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

Dim Result As New List(Of Integer)

For i As Integer = 0 To UBound(Vector)

Result.Add(Vector(i) ^ 2)

Next


    1. LINQ подход

Dim Query = From element In Vector _

Select element ^ 2



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

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

Dim Result As New List(Of Integer)

Dim isOutput As Boolean = True

For i As Integer = 0 To UBound(Vector)

isOutput = True

For j As Integer = 0 To i

If i <> j And Vector(i) = Vector(j) Then

isOutput = False

Exit For


End If

Next


If isOutput = True Then Result.Add(Vector(i))

Next


    1. LINQ подход

Dim Query = From element In Vector _

Select element Distinct



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

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

Dim count As Integer = 0

For i As Integer = 0 To UBound(Vector)

If Vector(i) < 0 Then count += 1

Next


    1. LINQ подход

Dim Result As Integer = Aggregate Element In Vector _

Where Element < 0 Into Count()



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

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

Dim sum As Integer = 0

Dim average As Double = 0

Dim count As Integer = UBound(Vector) + 1

For i As Integer = 0 To count - 1

sum += Vector(i)

Next


average = sum / count

    1. LINQ подход

Dim Result As Double = Aggregate Element In Vector _

Into Average()



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

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

Dim sum As Integer = 0

For i As Integer = 0 To UBound(Vector)

sum += Vector(i)

Next


    1. LINQ подход

Dim Result As Integer = Aggregate Element In Vector _

Into Sum()



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

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

Dim max As Integer = Vector(0)

For i As Integer = 1 To UBound(Vector)

If Vector(i) > max Then max = Vector(i)

Next


    1. LINQ подход

Dim Result As Integer = Aggregate Element In Vector _

Into Max()


Результаты сравнения



Алгоритм

LINQ, мс

Традиционный, мс

1

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

1205

1324

2

Сортировка по возрастанию

62

6801

3

Возведение в квадрат

13791

14820

4

Отбор элементов без повторов

4330

209181

5

Количество отрицательных элементов

2137

592

6

Среднее значение

1139

201

7

Суммирование элементов

920

172

8

Поиск максимума

983

187

Выводы

  1. Проведено сравнение традиционной технологии обработки массива данных с технологией LINQ.

  2. Показано, что использование языка запросов LINQ значительно сокращает время разработки и объем написанного кода при проектировании алгоритмов для решения типичных задач обработки массива данных.

  3. На некоторых типах рассмотренных задач (выборка положительных элементов, сортировка, возведение в квадрат, отбор элементов без повторов) производительность алгоритмов с LINQ технологией выше, чем у традиционных итерационных алгоритмов. На остальных рассмотренных типах задач (количество отрицательных элементов, вычисление среднего значения, суммирование элементов, поиск максимума) производительность алгоритмов с LINQ технологией хоть и ниже производительности итерационных алгоритмов, но является приемлемой для обработки достаточно больших объемов данных без существенных потерь скорости.

Рассматриваемая в данной статье технология LINQ успешно применялась автором для написания алгоритма обработки массива результатов тестирования более чем 6200 школьников 5 классов всех школ республики Северная Осетия-Алания в конце 2007 г.

Литература



  1. Вагнер В. Исследуем LINQ // Алгоритм 2006. № 4.

  2. Чистяков В. Коллекции в .NET Framework Class Library // RSDN Magazine 2003. № 6.

  3. Paolo Pialorsi, Marco Russo. Introducing Microsoft LINQ. Microsoft Press. 2007.



* Научный руководитель к.т.н., доц. Мамонтов Д. В.

Похожие:

Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconПрактикум по созданию базы данных и их обработке с использованием запросов, отчетов и форм, в том числе с использованием модулей Visual Basic

Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconVisual Basic крепкий орешек!
Итак, вы решили изучить язык программирования высокого уровня Visual Basic. Я попытаюсь помочь вам в этом. Наберитесь немного терпения,...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconVisual Basic Основы работы с базами данных
Умение обращаться с файлами данных чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconЧто же такое Microsoft Visual FoxPro? Язык программирования, база данных или нечто иное? Немного истории
Ведь язык xBase это значительно более "высокоуровневый", и соответственно более абстрактный язык, нежели традиционный языки программирования,...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconПрограмма курса " Основы объектно-ориентированного программирования ( Visual Basic )"
В качестве основного языка программирования выбран язык Visual Basic, так как он является одним из широко распространенных языков,...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconСодержимое компакт-диска «Основы программирования на примере Visual Basic. Net»
Учебно-методический и программный комплекс по курсу «Основы программирования на примере Visual Basic. Net» позволяет научиться разрабатывать...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconСоздание xml-документа
Еще лучше воспользоваться редактором, в котором предусмотрена возможность анализа исходных кодов, например, текстовым редактором...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconVisual C++ версии 0 фирмы Microsoft с библиотекой классов mfc
В качестве программной среды для разработки программного комплекса по обработке аэрокосмических изображений выбрана система объектно-ориентированного...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconЯзык поисковых запросов
Язык запросов — это искусственный язык, на котором делаются запросы к базам данных и другим информационным системам, особенно к информационно-поисковым...
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008 iconИспользование языка программирования Visual Basic для решения математических задач

Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org