46524 (Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008)
Описание файла
Документ из архива "Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "46524"
Текст из документа "46524"
Использование интегрированных в язык запросов (linq) при обработке массива данных в microsoft visual basic 2008
Асп. Волошин С. Б.*1
Кафедра теории и автоматизации металлургических процессов и печей.
Северо-Кавказский горно-металлургический институт (государственный технологический университет)
Проведено сравнение традиционной технологии обработки массива данных с технологией 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 )>)[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
LINQ подход
Dim Query = From element In Vector Where element >= 0 _
Select element
Выборка положительных элементов и ранжирование их по возрастанию.
Традиционный подход
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()
LINQ подход
Dim Query = From element In Vector Where element >= 0 _
Select element Order By element
Возведение в квадрат всех элементов исходного множества
Традиционный подход
Dim Result As New List(Of Integer)
For i As Integer = 0 To UBound(Vector)
Result.Add(Vector(i) ^ 2)
Next
LINQ подход
Dim Query = From element In Vector _
Select element ^ 2
Отбор элементов исходного множества без повторов элементов с одинаковыми значениями
Традиционный подход
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
LINQ подход
Dim Query = From element In Vector _
Select element Distinct
Вычисление количества отрицательных элементов в исходном множестве
Традиционный подход
Dim count As Integer = 0
For i As Integer = 0 To UBound(Vector)
If Vector(i) < 0 Then count += 1
Next
LINQ подход
Dim Result As Integer = Aggregate Element In Vector _
Where Element < 0 Into Count()
Вычисление среднего значения элементов исходного множества
Традиционный подход
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
LINQ подход
Dim Result As Double = Aggregate Element In Vector _
Into Average()
Вычисление суммы элементов исходного множества.
Традиционный подход
Dim sum As Integer = 0
For i As Integer = 0 To UBound(Vector)
sum += Vector(i)
Next
LINQ подход
Dim Result As Integer = Aggregate Element In Vector _
Into Sum()
Нахождение элемента исходного массива с максимальным значением.
Традиционный подход
Dim max As Integer = Vector(0)
For i As Integer = 1 To UBound(Vector)
If Vector(i) > max Then max = Vector(i)
Next
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 |
Выводы
Проведено сравнение традиционной технологии обработки массива данных с технологией LINQ.
Показано, что использование языка запросов LINQ значительно сокращает время разработки и объем написанного кода при проектировании алгоритмов для решения типичных задач обработки массива данных.
На некоторых типах рассмотренных задач (выборка положительных элементов, сортировка, возведение в квадрат, отбор элементов без повторов) производительность алгоритмов с LINQ технологией выше, чем у традиционных итерационных алгоритмов. На остальных рассмотренных типах задач (количество отрицательных элементов, вычисление среднего значения, суммирование элементов, поиск максимума) производительность алгоритмов с LINQ технологией хоть и ниже производительности итерационных алгоритмов, но является приемлемой для обработки достаточно больших объемов данных без существенных потерь скорости.
Рассматриваемая в данной статье технология LINQ успешно применялась автором для написания алгоритма обработки массива результатов тестирования более чем 6200 школьников 5 классов всех школ республики Северная Осетия-Алания в конце 2007 г.
Литература
Вагнер В. Исследуем LINQ // Алгоритм 2006. № 4.
Чистяков В. Коллекции в .NET Framework Class Library // RSDN Magazine 2003. № 6.
Paolo Pialorsi, Marco Russo. Introducing Microsoft LINQ. Microsoft Press. 2007.
Список литературы
Для подготовки данной работы были использованы материалы с сайта http://www.skgtu.ru/
УДК 621.372
Перспектива внедрения оптических сетей взамен оптических линий связи
Асп. Хетагуров А.М.*2
Кафедра «Промышленная электроника».
Северо-Кавказский горно-металлургический институт
(государственный технологический университет)
Рассмотрена перспектива перехода от использования оптических линий связи к использованию оптических сетей связи. Необходимость осуществления перехода будет возрастать, так как объемы передачи информации ежегодно удваиваются, увеличивается число абонентов, испытывающих потребность в получении и передачи данных.
Еще совсем недавно критерием развития оптической связи было развитие оптических линий связи. Приоритетной задачей при этом было увеличение скорости, дальности и снижения стоимости передачи единицы информации.
На нынешнем этапе очевидно, что развитие оптических линий связи пойдет преимущественно в русле создания оптических сетей.
Повышение эффективности передачи по оптическим линиям продолжает играть ключевую роль, но одновременно возрастает важность задачи снижения стоимости маршрутизации единицы информации. Современные системы связи от выполнения простейшей задачи – оптической передачи информации между двумя точками – переходят к выполнению более сложной задачи по управлению и коммутации потоками информации в оптической форме [1].
Оптические линии связи хорошо зарекомендовали себя при высокоскоростной передаче информации от точки к точке. На концах таких линий данные преобразовывались из электрической в оптическую форму и обратно. Задачи по контролю, управлению, коммутации и маршрутизации, выполнялись оборудованием, работающим с цифровыми сигналами в электронной форме (SDH или IP оборудованием). Физический уровень такой сети представляет собой прозрачную, статическую оптическую сеть. Такие сети стали появляться в начале 80-х годов прошлого века.
Процесс эволюции оптических сетей связи.
По мере развития электронных технологий и технологий производства оптического волокна оптические сети переходят от статических к динамическим, полностью оптическим сетям и от прозрачных сетей с коммутацией каналов к интеллектуальным оптическим сетям с пакетной коммутацией данных [2].
Таким образом, по мере развития оптических сетей все больше функций будет выполнятся над сигналами в оптической форме без преобразования их в электрическую. Тенденция данного направления развития оптических сетей обуславливается с экономической точки зрения, так как существенную долю стоимости сети составляют оптоэлектрооптические преобразователи. Снижения суммарного числа таких преобразователей приведет к снижению суммарной стоимости сети, снизится и общее энергопотребление сети, существенно сократится общая площадь, занимаемая оборудованием.
Однако, помимо экономического обоснования использования полностью оптических сетей, есть основания полагать, что замена оптоэлектрооптических преобразователей полностью оптическими увеличит скорость коммутации и пропускную способность оптических сетей, а именно к этому стремятся компании, предоставляющие услуги связи по волоконно-оптическим каналам, так как объемы передаваемой информации увеличиваются с каждым днем. Оптические переключатели каналов способны коммутировать потоки информации до нескольких Тбит/с, в то время как наилучшие в своем классе IP – роутеры поддерживают максимальные скорости потоков информации порядка нескольких сот Мбит/с [3]. Значит транзитный поток информации должен проходить через промежуточное узлы, оставаясь в оптической форме. Оптоэлектрическое и электронно-оптическое преобразование в такой ситуации необходимо только в оконечных узлах для объединения низкоскоростных потоков информации. Оптические коммутаторы первого поколения осуществляют переключение спектральных каналов и пространственную коммутацию между оптическими волокнами.
Поскольку оптические коммутаторы преобразовывают весь поток информации, передаваемой по определенному каналу без каких либо преобразований, то такие устройства являются прозрачными относительно используемых цифровых технологий, форматов модуляций и т.д. Сегодня уже началось интенсивное внедрение таких технологий в коммерческие сети. Одновременно ведут исследования методов обработки сигналов в оптической форме, исследуют различные методы оптического преобразования длины волны световой несущей, методы оптического временного мультиплексирования и демультиплексирования и оптической регенерации. На фоне этого возникло научное направление «фотоника», занимающееся исследованием возможностей управления оптическими сигналами с использованием управляющих модулированных оптических полей [4].