相关疑难解决方法(0)

我怎样才能限制Parallel.ForEach?

我有一个Parallel.ForEach()异步循环,我下载了一些网页.我的带宽有限,所以我每次只能下载x页,但Parallel.ForEach会执行所需网页的完整列表.

有没有办法在运行Parallel.ForEach时限制线程号或任何其他限制器?

演示代码:

Parallel.ForEach(listOfWebpages, webpage => {
  Download(webpage);
});
Run Code Online (Sandbox Code Playgroud)

真正的任务与网页无关,因此创意网络抓取解决方案无济于事.

.net c# asynchronous parallel.foreach

282
推荐指数
5
解决办法
14万
查看次数

在Parallel.ForEach中嵌套等待

在metro应用程序中,我需要执行许多WCF调用.有大量的调用,所以我需要在并行循环中进行调用.问题是并行循环在WCF调用完成之前退出.

你会如何重构这个按预期工作?

var ids = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
var customers = new  System.Collections.Concurrent.BlockingCollection<Customer>();

Parallel.ForEach(ids, async i =>
{
    ICustomerRepo repo = new CustomerRepo();
    var cust = await repo.GetCustomer(i);
    customers.Add(cust);
});

foreach ( var customer in customers )
{
    Console.WriteLine(customer.ID);
}

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

c# wcf task-parallel-library async-await parallel.foreach

159
推荐指数
9
解决办法
10万
查看次数

SqlCommand.Prepare()做什么以及什么时候应该使用它?

可能重复:
在C#中使用SqlCommand Prepare的优点和缺点?

这是MSDN说有关SqlCommand.Prepare():

在SQL Server实例上创建命令的准备版本.

任何人都可以提供更多的见解,了解这意味着何时应该使用它?

.net ado.net sqlcommand

16
推荐指数
3
解决办法
1万
查看次数

如何在C#.NET(SQL Server)中正确有效地重用预准备语句?

我看了很多问题,但显然我的SO-fu不能胜任这个任务,所以我在这里.我试图有效地使用预准备语句,我不仅仅意味着参数化单个语句,而是编译一个语句以便重复使用多次.我的问题在于参数和重用以及如何正确实现.

一般来说,我遵循这个程序(人为的例子):

SqlConnection db = new SqlConnection(...);
SqlCommand s = new SqlCommand("select * from foo where a=@a", db);
s.Parameters.Add("@a", SqlDbType.VarChar, 8);
s.Prepare();
...
s.Parameters["@a"] = "bozo";
s.Execute();
Run Code Online (Sandbox Code Playgroud)

超级,有效.但是,每次运行此查询时,我都不想执行所有这些步骤(或后四个步骤).这似乎抵消了准备陈述的整个想法.在我看来,我只需要更改参数并重新执行,但问题是如何做到这一点?

我试过s.Parameters.Clear(),但这实际上删除了参数本身,而不仅仅是值,所以我基本上需要重新Add参数并再次重复Prepare,这似乎也打破了整个点.不用了,谢谢.

在这一点上,我留下迭代s.Parameters并将它们全部设置为null或其他值.它是否正确?不幸的是,在我目前的项目中,我有大约15个参数的查询需要执行〜每次运行10,000次.我可以将这个迭代分流成一个方法但是想知道是否有更好的方法来做到这一点(没有存储过程).

我目前的解决方法是一个扩展方法,SqlParameterCollection.Nullify它将所有参数设置为null,这对我的情况很好.我只是在执行后运行它.


我发现了一些几乎完全相同但(恕我直言)尚未解答的问题:

准备语句和.NET中的内置连接池

SQLite/C#连接池和准备语句混淆(Serge非常接近回答!)

我能找到的最佳答案是(1)上面的常识和(2)这个页面:

http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

.net c# sql sql-server prepared-statement

14
推荐指数
2
解决办法
2万
查看次数

Parallel ForEach的本地初始化如何工作?

我不确定在Parallel.ForEach中使用本地init函数,如msdn文章中所述:http://msdn.microsoft.com/en-us/library/dd997393.aspx

Parallel.ForEach<int, long>(nums, // source collection
   () => 0, // method to initialize the local variable
   (j, loop, subtotal) => // method invoked by the loop on each iteration
   {
      subtotal += nums[j]; //modify local variable 
      return subtotal; // value to be passed to next iteration
   },...
Run Code Online (Sandbox Code Playgroud)

()=> 0如何初始化任何东西?变量的名称是什么,如何在循环逻辑中使用它?

c# task-parallel-library

13
推荐指数
2
解决办法
8794
查看次数