我正在尝试将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

关于c# - 将DataTable上载到Azure Blob存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37305800/

10-10 07:38