【问题标题】:OutOfMemoryException multithreading c#OutOfMemoryException 多线程 c#
【发布时间】:2012-01-08 04:27:55
【问题描述】:

问题是程序抛出异常。创建多个线程后。我们如何限制循环中创建的线程数?

 for (int jrCnt = rCnt; jrCnt <= arrayTable.GetUpperBound(0); jrCnt++)
                {
                    /* bla bla bla */

                    if ((!string.IsNullOrEmpty(prcI.name)) &&
                        (prcI.prc != 0))
                    {
                        /*bla bla bla*/

                        var thread = // run updade or add
                                                    new Thread(() =>
                                                    {

                                                        if (!Accessor.AddProductUpdateProduct(prcI)) _updateCounter++;
                                                        _countadd++;

                                                    });
                        thread.Name = "Add_or_update-no_" + thread.ManagedThreadId;
                        thread.Priority = ThreadPriority.Lowest;

                        thread.Start();
                    }

一些澄清。

这是循环开始前 n 次。一旦我添加了线程池,这个循环就非常快了。因此 Threadpool 触发了 180 次。我为我的英语道歉。

for (int i = sbook; i < book; i++)
            {
                dt = Accessor.ImporterXls(_path, i);// array for method

                ConstructWithBook(dt, rCnt, sbook, book, priceSelect, nametov, pricetov,
                                 categorytov);
            }

【问题讨论】:

  • 您需要在此处提供一些上下文并更具体地表达您的问题。现在直接回答你的问题,我会说删除 Thread.Start..
  • 我想在单独的线程中执行一段代码。我需要它来加速程序。此循环处理 9000 条记录。因此,创建了很多线程而没有足够的内存。

标签: arrays multithreading for-loop


【解决方案1】:

【讨论】:

  • 使用了线程池。但这个周期节奏很快,处理了 9000 条记录中的 180 条记录。
  • 这是您问题的根源,您超出了可用的系统资源。线程池应该更有效,因为您没有创建新线程。尝试查看GetMaxThreadsSetMaxThreads 方法
  • 我添加了导致这个问题的代码。感谢您的帮助!
  • 问题解决了!谢谢!所有线程都按预期执行。我作弊的进度条。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 2015-02-06
    • 2018-07-22
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多