次のコードを使用して、エンティティを Azure テーブルに挿入しようとしています。
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 秒の遅延があることがわかりました。私はここで何か間違ったことをしていると思います。どんなコメントでも大歓迎です。