将 DataTable 上传到 Azure blob 存储
Uploading DataTable to Azure blob storage
我正在尝试将 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);
}
}
根据我们的开发人员,这不需要整个 table 在内存中缓冲,并且可能会遇到较少的数据复制。
原回答:
您可以使用CloudBlockBlob.UploadFromByteArray方法,直接上传字节数组,而不是创建第二个流。
我正在尝试将 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);
}
}
根据我们的开发人员,这不需要整个 table 在内存中缓冲,并且可能会遇到较少的数据复制。
原回答:
您可以使用CloudBlockBlob.UploadFromByteArray方法,直接上传字节数组,而不是创建第二个流。