将DataTable上载到Azure blob存储

我正在尝试将DataTable序列化为XML,然后将其上载到Azure blob存储。

下面的代码有效,但看起来很笨重,内存很饿。 有一个更好的方法吗? 我特别指的是我将内存流转储到字节数组然后从中创建新的内存流。

var container = blobClient.GetContainerReference("container"); var blockBlob = container.GetBlockBlobReference("blob"); byte[] blobBytes; using (var writeStream = new MemoryStream()) { using (var writer = new StreamWriter(writeStream)) { table.WriteXml(writer, XmlWriteMode.WriteSchema); } blobBytes = writeStream.ToArray(); } using (var readStream = new MemoryStream(blobBytes)) { blockBlob.UploadFromStream(readStream); } 

新答案:

我已经学会了一种更好的方法,即直接向blob打开写入流。 例如:

  using (var writeStream = blockBlob.OpenWrite()) { using (var writer = new StreamWriter(writeStream)) { table.WriteXml(writer, XmlWriteMode.WriteSchema); } } 

根据我们的开发人员,这不需要将整个表缓存在内存中,并且可能会遇到较少的数据复制。

原始答案:

您可以使用CloudBlockBlob.UploadFromByteArray方法,直接上传字节数组,而不是创建第二个流。

有关方法语法,请参阅https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.uploadfrombytearray.aspx 。