Литмир - Электронная Библиотека
Содержание  
A
A

  '---------------------------------------------------------

  If (m_processingState <> ProcessingState.lookingForPrime) Then

   Return False

  End If

  'Если число делится без остатка,

  'значит, оно не является простым

  If (potentialPrime Mod current_test_item = 0) Then

   Return False

  End If

  'Увеличить число на два

  current_test_item = current test_item + 2

  '-------------------------------------

  'Увеличить число проверенных элементов

  '-------------------------------------

  'ПРИМЕЧАНИЕ. Мы используем блокирование потока для уверенности в том,

  'что эти значения не считываются во время выполнения операции

  'их записи. Поскольку доступ к m_comparisonsSoFar

  'и m_CurrentNumberBeingExamined могут осуществлять

  'одновременно несколько нитей, любая выполняемая над ними

  'операция записи/считывания должна синхронизироваться с "блокировкой",

  'что будет гарантировать "атомарность" этих операций

  SyncLock (Me)

   m_CurrentNumberBeingExamined = potentialPrime

   m_comparisonsSoFar = m_comparisonsSoFar + 1

  End SyncLock

 End While

 'Число является простым

 Return True

End Function

End Class

Примеры к главе 10 (производительность и XML)

Листинг 10.1. Использование XML DOM для сохранения данных в файле и их загрузки

Option Strict On

Option Compare Binary

Imports System

'---------------------------------------------

'Демонстрирует сохранение и загрузку файлов с

'использованием объектной модели документа XML

'---------------------------------------------

Public Class SaveAndLoadXML_UseDOM

 'XML-дескрипторы, которые мы будем использовать в нашем документе

 Const XML_ROOT_TAG As String = "AllMyData"

 Const XML_USERINFO_TAG As String = "UserInfo"

 Const XML_USERID_TAG As String = "UserID"

 Const XML_NAMEINFO_TAG As String = "Name"

 Const XML_FIRSTNAME _TAG As String = "FirstName"

 Const XML_LASTNAME_TAG As String = "LastName"

 '--------------------------------------------------------------

 'Загружает пользовательское состояние

 ' [in] fileName: Имя файла, используемого для сохранения данных

 ' [out] userId: Загруженный идентификатор пользователя

 ' [out] firstName: Загруженное имя пользователя

 ' [out] lastName: Загруженная фамилия пользователя

 '--------------------------------------------------------------

 Public Shared Sub XML_LoadUserInfo(ByVal fileName As String, _

  ByRef userId As Integer, ByRef firstName As String, _

  ByRef lastName As String)

 'Начинаем с нулевых значений

 userId = 0

 firstName = ""

 lastName = ""

 'Предполагаем, что данные еще не загружены

 Dim gotUserInfoData As Boolean = False

 Dim xmlDocument As System.Xml.XmlDocument = _

  New System.Xml.XmlDocument

 xmlDocument.Load(fileName)

 'Получить корневой узел

 Dim rootElement As System.Xml.XmlElement

 rootElement = _

  CType(xmlDocument.ChildNodes(0), System.Xml.XmlElement)

 'Убедиться в том, что корневой узел согласуется с ожидаемым текстом,

 'ибо противное означает, что мы имеем дело с каким-то другим XML-файлом

 If (rootElement.Name <> XML_ROOT_TAG) Then

  Throw New Exception("Тип корневого узла не совпадает с ожидаемым!")

 End If

 '-----------------------------------------------------------

 'Простой конечный автомат для итеративного обхода всех узлов

 '-----------------------------------------------------------

 Dim childOf_RootNode As System.Xml.XmlElement

 For Each childOf_RootNode In _

  rootElement.ChildNodes

  'Если это узел UserInfo, то мы хотим просмотреть его содержимое

  If (childOf_RootNode.Name = XML_USERINFO_TAG) Then

237
{"b":"947732","o":1}