0

製品フィード ファイルをシステムに処理するプロジェクトがあります。1 つの特定のフィード ファイルでは、プロセス全体に約 40 ~ 50 分かかります。これで、フィードから画像を処理するを作成し、ストレージ クライアントを作成WebJobして、最初のプロジェクトから に画像の URL を送信しています。WebJobそれを自分のプロジェクトに入れると、処理時間が大幅に増加したので、Task.Runto useFire and Forgetアプローチで使用してみましたが、それでも全体の処理時間は約 2 時間になりました。

ストレージ キューを作成するメソッドを呼び出す方法を次に示します。

if (insertImages)
{
    #pragma warning disable 4014
    Task.Run(async () => { await new QueueUtility().CreateQueueMessage(picture); }).ConfigureAwait(false);
    #pragma warning restore 4014
}

そして、これがキューメッセージを作成するための私のコードです

public async Task CreateQueueMessage(Picture picture)
    {
            Utility.Log log = new Utility.Log();
            await AddQueueMessage(picture.url);

    }


public async Task AddQueueMessage(string queueMessage)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("ImagekWebJobStorage"));

        // Create the queue client.
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

        // Retrieve a reference to a container.
        CloudQueue queue = queueClient.GetQueueReference("imagekqueue");

        // Create the queue if it doesn't already exist
        queue.CreateIfNotExists();

        // Create a message and add it to the queue.
        CloudQueueMessage message = new CloudQueueMessage(queueMessage);
        queue.AddMessage(message);

    }

処理時間が 2 倍になった理由がわかりません。また、それを回避する方法も見つかりません。これを解決するのに役立つアイデアは本当に役に立ちます。

4

1 に答える 1

0

2つのこと:

1 - を呼び出すたびにキューを作成しようとしていますAddQueueMessage()。これは不要な往復です。

2 - Nagle アルゴリズムをオフにしてみてください。

ServicePointManager.UseNagleAlgorithm=false;

そうしないと、小さな tcp パケットが 1/2 秒以上遅延する可能性があります。

于 2016-05-20T16:25:50.580 に答える