我将 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);
}
}
考虑到效率,我正在查看这些参数:
- BLOB事务。
- 带宽。(不确定是否计算在内,因为代码在数据中心运行)
- 实例上的内存消耗。
有几点要提:
我的 xml 文件大约 150-200 KB。
我知道 XDocument 将整个文件加载到内存中,并且在流( XmlWriter 和 XmlReader )中工作可以解决这个问题。但我认为这将需要使用 BlobStream ,这可能会导致事务效率降低(我认为)。
关于blob.Delete(),没有它,blob存储中上传的xml似乎在它的末尾缺少一些结束标记。我认为这是由与旧数据的冲突引起的。我在这里可能完全错了,但是使用 delete 解决了它(尽管要花费一笔交易)。
考虑到我提到的参数,我提供的代码是一种好的做法,还是存在更有效的方法?