gpt4 book ai didi

c# - 使用ThreadPool的优化方案。 C#

转载 作者:行者123 更新时间:2023-12-02 01:43:20 25 4
gpt4 key购买 nike

有了这个代码,vozhus 花了很长时间修补它,他工作稳定而快速。但似乎无法加快速度。很慢...

for (int jrCnt = rCnt; jrCnt <= arrayTable.GetUpperBound(0); jrCnt++)
{
var prcI = new Price();

/* here is the code search and add data to prcI */

if ((!string.IsNullOrEmpty(prcI.name)) && (prcI.prc != 0))
{ // function add

/* adding more information to prcI */

ThreadPool.QueueUserWorkItem(delegate
{
if (!Accessor.AddProductUpdateProduct(prcI)) _updateCounter++;
_countadd++;
}); // I put the longest function in the streams
}
}

这里我们调用这个函数。即使使用线程池,它也会运行很长时间。

public static bool AddProductUpdateProduct(Price price)
{
using (var db = new PriceDataContext())
{
var matchedprod =
db.Price.Where(x => x.name == price.name && x.company == price.company && x.date != price.date);

if (matchedprod.Select(x=>x).Count() > 1)
{
db.Price.DeleteOnSubmit(matchedprod.First());
db.SubmitChanges();
}

var matchedproduct = matchedprod.SingleOrDefault();

if (matchedproduct != null)
{
matchedproduct.date = price.date;
matchedproduct.prc = price.prc;

db.SubmitChanges();
return false;
}
}


/*here the code to add the product to the database.*/
return true;
}

请告诉我如何加快线程池的工作速度?

最佳答案

使用单独的线程不会加快任何应用程序的速度。您所做的就是将处理从主线程转移到另一个线程。您需要将处理分解为更小的部分,并将每个部分移动到单独的线程中以获得性能增益。

但是,在这种情况下它没有帮助。这是您的 LINQ 查询有缺陷。 Enable debugging 。查看生成的 SQL 并修复它们。

其次:

if (matchedprod.SingleOrDefault() != null)
{
matchedprod.SingleOrDefault().date = price.date;
matchedprod.SingleOrDefault().prc = price.prc;

db.SubmitChanges();
return false;
}

这将查询数据库 3 次。每次调用 SingleOrDefault 一次。执行一次查询并将结果存储在变量中。

第三:

matchedprodmatchedprodDel 之间有什么区别?对它们的查询是相等的吗?

第四:

这更容易阅读:

var matchedprod = db.Price.Where(x => x.name == price.name && x.company == price.company && x.date != price.date)

关于c# - 使用ThreadPool的优化方案。 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com