Azure - Обновление существующего xml файла в BLOB хранилище

У меня есть 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);                    
      }                               
}

Я рассматриваю эти параметры с учетом эффективности:

  1. BLOB Transactions.
  2. Bandwidth. (Не уверен, что она учитывается, так как код работает в дата-центре)
  3. Потребление памяти на экземпляре.

Некоторые вещи, которые следует упомянуть:

  • Мои xml-файлы имеют размер около 150-200 КБ.

  • Я знаю о том, что XDocument загружает весь файл в память. память, и работа в потоках (XmlWriter и XmlReader) могла бы решить эту проблему. Но я предполагаю, что это потребует работы с BlobStream что может привести к менее эффективным транзакциям (я думаю).

  • По поводу blob.Delete(), без него загруженный xml в хранилище blob похоже, не хватает некоторых закрывающих тегов в конце. Я предположил. что это вызвано столкновением со старыми данными. Я могу быть полностью ошибаться, но использование удаления решило эту проблему (хотя и стоило одной еще одной транзакции).

Является ли код, который я предоставил, хорошей практикой или может быть существует более эффективный способ, учитывая параметры, которые я упомянул?

5
задан Yaron Levi 4 October 2011 в 20:57
поделиться