0

我有一个项目将产品提要文件处理到我的系统中。对于一个特定的提要文件,整个过程大约需要 40-50 分钟。现在我已经创建了一个WebJob来处理来自提要的图像,并且我正在WebJob通过创建存储客户端将图片 url 从我的第一个项目发送到。当我在我的项目中使用它时,它显着增加了处理时间,所以我尝试将它与Task.Run使用Fire 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);

    }

我不明白为什么我的处理时间加倍,也找不到解决方法。任何能帮助我解决这个问题的想法都会非常有帮助。

4

1 回答 1

0

两件事情:

1 - 您尝试在每次调用时创建队列AddQueueMessage()。这是不必要的往返。

2 - 尝试关闭 Nagle 算法,通过

ServicePointManager.UseNagleAlgorithm=false;

否则,较小的 tcp 数据包可能会延迟 1/2 秒以上。

于 2016-05-20T16:25:50.580 回答