【发布时间】:2011-10-04 20:52:10
【问题描述】:
我将 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(),没有它,上传的xml在blob存储中 似乎在它的末尾缺少一些结束标签。我以为 这是由于与旧数据的冲突造成的。我可以是 这里完全错误,但使用删除解决了它(花费一个 更多交易)。
考虑到我提到的参数,我提供的代码是一种好的做法,还是存在一种更有效的方法?
【问题讨论】:
标签: c# xml azure azure-storage azure-blob-storage