Ну, в общем, я хочу создать резервную копию своей базы данных в формате XML, и я не хочу, чтобы эта резервная копия была обработана с сервера, а из приложения.
Я думаю, что обработаю событие, которое запускается в контексте, а затем сохраню свои данные.
Поскольку я исключаю, что размер файла xml не будет слишком соответствовать (будет содержать 100-300 записей небольших сущностей простых коротких типов данных), я решил работать синхронно с БД XML:
Вот частичный класс строго типизированного набора dta:
Imports System.Xml
Partial NotInheritable Class XmlDatabas : Inherits Data.DataSet
Private ReadOnly XmlFileName As String = _
My.Application.Info.DirectoryPath & "\Data.xml"
Private Sub SeawaveData_Initialized(sender As Object, e EventArgs) _
Handles Me.Initialized
If Not IO.File.Exists(XmlFileName) Then WriteXml(XmlFileName)
ReadXml()
End Sub
Public Shadows Sub AcceptChanges()
MyBase.AcceptChanges()
WriteXml()
End Sub
Public Overloads Sub ReadXml()
ReadXml(XmlFileName)
End Sub
Кстати, если вы беспокоитесь о себе, так что я даже сделал быстрый тест на перфорацию, просто чтобы получить указание (не надейтесь, это очень абстрактный тест, попробуйте еще раз, если вы когда-нибудь намереваетесь создать XmlDb больших файлов!) ,
учтите также, что этот файл не проверяет XML-файл на наличие внешних изменений, может быть полезен для приложения win, в ASP.NET или если вы хотите разрешить множественные запросы, рассмотрите способ реализации проверки изменений в существующем приложении, или создание библиотеки DAL DLL с очередью внесения изменений.
Module Program
Sub Main()
Using ds As New XmlDb
Dim longString = ""
For index As Integer = 1 To 250
longString &= "aaaaaaaaaaaaaaaaaaaaaaaaa"
Next
Dim step1 = Now
For index As Integer = 1 To Short.MaxValue
ds.Account.AddAccountRow(index.ToString, longString, True, True, _
longString, "", "", longString, longString, longString, _
longString, longString, longString, longString, longString, _
longString)
Next
Dim step2 = Now
ds.AcceptChanges()
Dim step3 = Now
Console.WriteLine("step 1 took: {0:T}", step2 - step1)
Console.WriteLine("step 2 took: {0:T}", step3 - step2)
Console.WriteLine("entire operation took: {0:T}", step3 - step1)
End Using
Stop
End Sub
End Module
Public Overloads Sub WriteXml()
WriteXml(XmlFileName)
End Sub
End Class
Results:
step 1 took: 00:00:01.3390000
step 2 took: 00:00:23.5280000
entire operation took: 00:00:24.8670000
24,8 секунды , а?
хочешь услышать, насколько большой файл XML? 2062857146 байт, что составляет 1967,2938785553 МБ