English 中文(简体)
与此同时。 在大约1370次频率之后冻结,没有任何想法说明为什么
原标题:Parallel.For freezes after around 1370 iterations, no idea why

I m同时运行。 对7500多件物体的 lo。 除此以外,我还要向每个目标做一些事情,具体来说,需要两个网络服务和两个内部方法。 网络服务只是检查标的、处理和归还一个插图,然后将它作为物上的财产。 采用两种内部方法。

我不想在磁盘上写任何东西或从磁盘上读。

我也用一个标签和进步条码更新了信标,让用户知道它在哪里。 该法典:

var task = Task.Factory.StartNew(() =>
{
  Parallel.For(0, upperLimit, (i, loopState) =>
  {
     if (cancellationToken.IsCancellationRequested)
        loopState.Stop();
     lblProgressBar.Invoke(
       (Action)
       (() => lblProgressBar.Text = string.Format("Processing record {0} of {1}.", (progressCounter++), upperLimit)));
     progByStep.Invoke(
       (Action)
       (() => progByStep.Value = (progressCounter - 1)));

      CallSvc1(entity[i]);
      Conversion1(entity[i]);
      CallSvc2(entity[i]);
      Conversion2(entity[i]);
  });
}, cancellationToken);

这是在Win7 32bit机器上进行的。

是否有任何想法,说明为何在加油人约1370人时突然冻结这种冻结?

任何想法,我如何能够对此进行ug弄,看看什么会lock什么?

EDIT:
Some answers to the comments below:
@BrokenGlass - No, no interop. I ll try the x86 compilation and let you know.

@chibacity - 因为它承担着一项背景任务,所以它不冻结该调查。 直至冻结时,进展节奏和贴标签大约每秒2次。 冻结时,它只是停止行动。 我可以核实,它停止处理的次数已经处理,但不再处理。 在行动期间,CPU的双重核心2.2GHz使用率最低,每套3-4%,一旦冻结1-2%。

@Henk Holterman - 大约需要10-12分钟才能到达1360年,如果是,我可以核实所有这些记录均已处理,但不是其余的记录。

@CodeIn 混乱—— 感谢 我试图这样做! 如果我同时行事,守则就能够发挥作用,它只是永远和一天。 我曾试图限制read子的数量,但会这样做。

EDIT 2:
Some details as to what s going on with the webservices

Basically what s going on with the web services is that they pass in some data and receive data (an XmlNode). That node is then used in the Conversion1 process which in turn sets another property on the entity which is sent to the CallSvc2 method and so on. It looks like this:

private void CallSvc1(Entity entity)
{
    var svc = new MyWebService();
    var node = svc.CallMethod(entity.SomeProperty);
    entity.FieldToUpdate1.LoadXml(node.InnerXml);
}
private void Conversion1(Entity entity)
{
    // Do some xml inspection/conversion stuff
    if (entity.FieldToUpdate1.SelectSingleNode("SomeNode") == "something") {
        entity.FieldToUpdate2 = SomethingThatWasConverted;
    }
    else {
        // Do some more logic
    }
}
private void CallSvc2(Entity entity)
{
    var svc = new SomeOtherWebService();
    var xmlNode = svc.MethodToCall(entity.FieldToUpdate2.InnerXml);
    entity.AnotherXmlDocument.LoadXml(xmlNode.InnerXml);
}

你可以看到,它非常直截了当。 在一些转换方法中,仍有许多工作要做,但任何一种做法都不应阻碍。 如下文所述,在网络服务电话中,有1024处“等待”状态。 页: 1 在32台轨道机上,MaxThreads被拖欠至1023。

鉴于我在这里有的话,我怎么能够释放那些等待读物的人?

最佳回答

可能的解释:你把这一进程推向一个能够制造更多线索的国家,这阻碍了工作取得进展,这就是为什么一切都 gr着停顿。

坦率地说,无论这一假设是否正确,你必须对此采取完全不同的做法。 <代码>Parallel。 是解决这一问题的错误途径。 (Parallel) 最适合于万国邮联的工作。 你们在这里做的是国际海事组织的工作。 如果你真的需要提出数以千计的网络服务要求,那么你需要转向使用同步的代码,而不是多面的代码。 如果你使用同声波照相机,你就能够同时开始数千项要求,同时只使用一小部分线索。

无论这些请求是否实际能够同时执行,都是另一个问题——无论你是否使用你目前的“快乐”执行,还是更高效的协同执行,你很可能陷入rot。 (网络有时可以限制实际提出的申请数目)。) 因此,你可以像你一样,要求提出尽可能多的请求,但你可能发现,几乎所有的你要求都等待以前的请求完成。 E.g. 我想WebRequest将同时与任何单一领域的联系限为2。 多达1 000+天线(或1 000+作为合成要求)只是将更多的请求装上,等待成为目前两项请求之一!

你应该自己 do。 你们需要决定有多少未决申请同时提出,并确保你只一开始提出许多请求。 仅询问<代码>Parallel,以发射数量之多,其发射速度将尽可能快。

www.un.org/Depts/DGACM/index_spanish.htm 增补:

快速固定装置可以是使用<代码>的超载。 接受<代码>ParallelOptions 反对的>的,可设定其MaxDegreeOfParallelism 财产,以限制同时申请的数量。 这将阻止这种可怕的实施工作,而实际上却不停。 但它仍然是解决这一问题的低效办法。 (大家都知道,你确实需要同时提出数以千计的请求。) 例如,如果你重写一个网络拖网,那实际上就是想做的一件合理的事情。 <代码>Parallel不是该职务的正确类别。 用作合成业务。 如果网络服务有助于你重新使用杀伤人员地雷(BeginXxx, EndXxx)的支持,你可在上总结。 任务物体-Task.TaskFactory 提供,该编码为正在展开的合成业务提供任务。

但是,如果你试图一劳永逸地提出数千份飞行请求,你确实需要仔细考虑你的旋转战略。 尽快提出这种要求不可能是最佳战略。

问题回答

持VS debugger。 当它似乎锁定时,将VS拖到Debug:突破 All。 然后去除:Windows:Threads,在你的工作过程中看透镜。 其中一些人应当展示你平行的 lo痕,这将告诉你,当 de者停止这一进程时,他们正在做什么。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...