我如何使其运行更快?

问题描述 投票:0回答:2

我可以执行线程而不是任务来加快运行速度吗?我正在尝试将114000个产品添加到数据库中。由于我的代码是正确的,因此我每分钟将大约100种产品输入数据库。

[我的任务(生产者)每个都刮取一个包含产品数据的XML文件,将其打包在Product类中,然后将其排队给消费者。

我的消费者从队列中取出每个产品,然后一次将其放入数据库1中。我使用实体框架,因此不安全。

public static void GetAllProductsFromIndexes_AndPutInDB(List<IndexModel> indexes, ProductContext context)
{
    BlockingCollection<IndexModel> inputQueue = CreateInputQueue(indexes);
    BlockingCollection<Product> productsQueue = new BlockingCollection<Product>(5000);

    var consumer = Task.Run(() =>
    {
        foreach (Product readyProduct in productsQueue.GetConsumingEnumerable())
        {
            InsertProductInDB(readyProduct, context);
        }
    });

    var producers = Enumerable.Range(0, 100)
        .Select(_ => Task.Run(() =>
        {
            foreach (IndexModel index in inputQueue.GetConsumingEnumerable())
            {
                Product product = new Product();
                byte[] unconvertedByteArray;
                string xml;
                string url = @"https://data.Icecat.biz/export/freexml.int/en/";

                unconvertedByteArray = DownloadIcecatFile(index.IndexNumber.ToString() + ".xml", url);
                xml = Encoding.UTF8.GetString(unconvertedByteArray);
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(xml);

                GetProductDetails(product, xmlDoc, index);

                XmlNodeList nodeList = (xmlDoc.SelectNodes("ICECAT-interface/Product/ProductFeature"));
                product.FeaturesLink = GetProductFeatures(product, nodeList);

                nodeList = (xmlDoc.SelectNodes("ICECAT-interface/Product/ProductGallery/ProductPicture"));
                product.Images = GetProductImages(nodeList);
                productsQueue.Add(product);
            }
        })).ToArray();

    Task.WaitAll(producers);
    productsQueue.CompleteAdding();
    consumer.Wait();
}

我可以执行线程而不是任务来加快运行速度吗?我正在尝试将114000个产品添加到数据库中。由于我的代码是正确的,所以我每分钟将大约100种产品输入数据库。我的任务(...

c# entity-framework producer-consumer
2个回答
1
投票

首先,请阅读speed rant以确保甚至值得调查。


0
投票

必须

© www.soinside.com 2019 - 2024. All rights reserved.