У меня есть XML-файлы, хранящиеся в BLOB-хранилище, и я пытаюсь понять, какой способ наиболее эффективен для их обновления (и/или добавления к ним некоторых элементов). В WebRole я придумал следующее:
using (MemoryStream ms = new MemoryStream())
{
var blob = container.GetBlobReference("file.xml");
blob.DownloadToStream(msOriginal);
XDocument xDoc= XDocument.Load(ms);
// Do some updates/inserts using LINQ to XML.
blob.Delete();//Details about this later on.
using(MemoryStream msNew = new MemoryStream())
{
xDoc.Save(msNew);
msNew.Seek(0,SeekOrigin.Begin);
blob.UploadFromStream(msNew);
}
}
Я рассматриваю эти параметры с учетом эффективности:
Некоторые вещи, которые следует упомянуть:
Мои xml-файлы имеют размер около 150-200 КБ.
Я знаю о том, что XDocument загружает весь файл в память. память, и работа в потоках (XmlWriter и XmlReader) могла бы решить эту проблему. Но я предполагаю, что это потребует работы с BlobStream что может привести к менее эффективным транзакциям (я думаю).
По поводу blob.Delete(), без него загруженный xml в хранилище blob похоже, не хватает некоторых закрывающих тегов в конце. Я предположил. что это вызвано столкновением со старыми данными. Я могу быть полностью ошибаться, но использование удаления решило эту проблему (хотя и стоило одной еще одной транзакции).
Является ли код, который я предоставил, хорошей практикой или может быть существует более эффективный способ, учитывая параметры, которые я упомянул?