首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用应力测试误差

应用应力测试误差
EN

Stack Overflow用户
提问于 2013-02-09 22:06:17
回答 2查看 650关注 0票数 1

我强调测试我的应用程序,并编写了一个简单的测试来生成数百个调用方法的线程。下面的代码适用于1000个线程和100 ms延迟。

在下面的代码中,当线程数为2000,延迟为100个时,错误不能将“below 32.dll”DLL加载到radButtonEmptyThread_Click的catch语句中的内存中。

  1. 我该怎么解决这个问题?
  2. 写着"Debug.Print(count.ToString());“的值总是1000 --为什么?

C#码

代码语言:javascript
复制
private void radButtonEmptyThread_Click(object sender, EventArgs e)
        {
            try
            {

                for (int i = 0; i < int.Parse(radTextBoxWaitThreads.Text); i++)
                {
                    Thread Trd = new Thread(() => EmptyThreadRequest(int.Parse(radTextBoxFloodDelay.Text), i));
                    Trd.IsBackground = true;
                    Trd.Start();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message.ToString());

            }
        }

        private void EmptyThreadRequest(int delay, int count)
        {

            try
            {

                System.Threading.Thread.Sleep(delay);
                Debug.Print(count.ToString());


            }

            catch (Exception ex)
            {

                MessageBox.Show(ex.Message.ToString());

            }
        }

    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-09 22:14:45

  1. 停止创建这么多线程。这是非常资源密集型的。相反,使用任务
  2. i是一个捕获变量,这意味着线程都访问原始变量,而不是副本。如果在循环中创建变量的副本,它将按预期工作。
票数 2
EN

Stack Overflow用户

发布于 2013-02-09 22:39:18

要处理捕获的变量问题,在循环中执行以下操作:

代码语言:javascript
复制
int x = i;
Thread Trd = new Thread(() => EmptyThreadRequest(int.Parse(radTextBoxFloodDelay.Text), x));

当然,考虑使用任务。

2000是Windows强制执行的功能限制。我认为这可能与分配给每个线程的最小堆栈有关,但我不会将我的生命押在它上。任务是很轻的线程,如果可能的话,他们更喜欢线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14792134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档