使用以下代码我尝试将实体插入天蓝色表格中。将项目添加到天蓝色表格时出现高延迟
public void AddItems<T>(T[] entitis, string tableName) where T : TableServiceEntity
{
using (new TimeLogger(_logger, "save items in table " + tableName + ", count: " + entitis.Length + ", duration: {0}"))
{
tableName = GetSafeTableName(tableName);
var items = RemoveDuplicates(entitis).ToArray();
var tasks = new List<Task>();
var context = _tableStorage.GetDataServiceContext();
for (int i = 0; i < items.Length; i++)
{
context.AttachTo(tableName, items[i]);
context.UpdateObject(items[i]);
if (i % 10 == 0 || i == items.Length - 1)
{
var context1 = context;
var task = Task.Factory.FromAsync<DataServiceResponse>(
context1.BeginSaveChangesWithRetries,
context1.EndSaveChangesWithRetries,
context1);
tasks.Add(task);
context = _tableStorage.GetDataServiceContext();
}
}
Task.WaitAll(tasks.ToArray());
}
}
此方法的调用方在多个分区中传递项。在我的测试中,我发现对于不同分区中的450个项目,大约有7到8个延迟时间。我认为我在这里做错了什么。任何评论非常感谢。
你的'DefaultConnectionLimit'是什么? (我们希望这些450个Web请求中有多少可以并行执行?)该代码是否与存储帐户在同一个数据中心中运行? – smarx 2012-08-06 16:29:00
谢谢,DefaultConnectionLimit设置为48.另外,在我的测试中,我发现多个分区中的10个项目批次提供了最佳延迟。最后,代码运行在同一个数据中心。 – 2012-08-07 08:48:30
我应该提到,我的网络上可能存在一些暂时性问题。今天早上相同的代码在3秒内运行! – 2012-08-07 08:51:06