windows azure表存储,如何启用keep alive

时间:2014-11-15 14:36:36

标签: azure azure-table-storage

目前我把这样的azure表存储:

public static void AzurePut(string Key, byte[] Value)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

    var keyhash = MyTable.CalculateMD5Hash(Key);
    var tc = MyTable.GetBinFromHash(keyhash, AzureTables.TableCount);
    CloudTable table = tableClient.GetTableReference("table" + tc);

    var entity = new AzureEntity();
    entity.Key = keyhash;
    entity.SetValue(Value);

    TableOperation insertOperation = TableOperation.InsertOrReplace(entity);
    table.Execute(insertOperation);
}

我做了很多看跌期权而且他们很慢。当我打开fidller时,它们变得快40倍。在检查为什么结果fiddler重用连接连接后:keep-alive headers。有没有办法使用表存储api?

1 个答案:

答案 0 :(得分:3)

<强>短: 将其添加到应用程序的启动代码中:

        ServicePointManager.DefaultConnectionLimit = 100; // Default 2
        ServicePointManager.UseNagleAlgorithm = false; // Default true

<强>解释

您不必添加任何Keep-Alive标头,它们已经存在。看看HttpWebRequestFactory(第86行):

#if WINDOWS_DESKTOP && !WINDOWS_PHONE
            request.KeepAlive = true;

            // Disable the Expect 100-Continue
            request.ServicePoint.Expect100Continue = false;
#endif

            return request;
        }

除此之外,HttpWebRequest默认使用HTTP 1.1 makes connection persistent by default

您可以使用TcpView查看正在重复使用的连接。

Fiddler是如此之快,主要是因为它非常聪明地重用连接,批处理和缓冲请求,特别是当你的应用程序发出大量并行请求时。

默认情况下,ServicePointManager.DefaultConnectionLimit为2,这意味着您可以同时只有2个待处理请求。想象一下,你有8个线程试图发出请求,其中2个可以在时间处于活动状态,其余的正在等待。提高限制可以大大提高并发请求。

另一个问题是默认启用ServicePointManager.UseNagleAlgorithm。由于大多数Azure表请求相对较小(HTTP消息大小<1460字节),因此它们是不必要的缓冲。请参阅此at Microsoft Azure Storage Team Blog (Nagle’s Algorithm is Not Friendly towards Small Requests)

的更长时间的解释