C#多线程 - 在100个线程中同时执行相同的方法

时间:2016-03-09 03:19:25

标签: c# multithreading task-parallel-library backgroundworker threadpool

我有一个类方法,我试图在近100个线程中同时执行。该方法基本上是关于HTTPWebRequests和数据库R / W. 我的应用程序是一个控制台应用程序,它会调用线程来调用此方法。

现在,当我没有线程并运行35-45个副本或我的控制台应用程序的实例时,我获得更快/更好的性能,但是当我运行100个线程时,性能下降多达50%。

我已经尝试过线程池,后台工作者,线程甚至任务的数组,但有些东西不能正常工作。这就是我在主类中调用静态方法的方法,而后者又将其他类方法分类。

            while (flagProcess)
        {
            if (RAMPRead.CheckJobQueue())
            {


                bool allThreadsinUse = true;
                for (int i = 0; i < ts.Length; i++)
                {
                    if (ts[i] == null || ts[i].ThreadState != ThreadState.Running)
                    {
                        ts[i] = new Thread(() =>
                        {
                            RAMPit(session);
                        });
                        ts[i].Start();
                        ts[i].IsBackground = true;
                        allThreadsinUse = false;
                        while (!ts[i].IsAlive) { }
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                        GC.Collect();
                    }
                }
                if (!allThreadsinUse)
                {
                    Thread.Sleep(10000);
                    MemoryManagement.FlushMemory();
                }
            }
            else
            {
                Thread.Sleep(10000);
                MemoryManagement.FlushMemory();
            }
        }

        private static void RAMPit(object s)
    {
        string result = string.Empty;
        Session outsession = new Session();
        _sem.Wait();
        using (z z = new z("user", "pass"))
        {
            outsession = z.ProcessNext((Session)s, "user", "pass");
            session = outsession;
        }
        _sem.Release();
        MemoryManagement.FlushMemory();
        //return result;
    }

我在这里做错了什么或者我如何能够同时运行多个线程以获得更快的输出。

0 个答案:

没有答案