2016-08-01 29 views
2

運行的線程有這樣的代碼:每行我如何限制在C#中硒

foreach (var s in linesTxt) 
{ 
    if (!myList.Contains(s)) 
    { 
     myList.Add(s); 
     if (!String.IsNullOrWhiteSpace(s)) 
     { 
      Processor(s); 
     } 
    } 
} 

它得到每一個細節在一個.txt文件,一個數據。

這是線程部分:

public void Processor(string Sample) 
{ 
    //Process p = Process.GetCurrentProcess(); 
    ThreadStart Thread1 = new ThreadStart(() => firstFunc(Sample)); 
    ThreadStart Thread2 = new ThreadStart(() => secondFunc(Sample)); 
    ThreadStart Thread3 = new ThreadStart(() => thirdFunc(Sample)); 
    ThreadStart Thread4 = new ThreadStart(() => fourthFunc(Sample)); 
    ThreadStart Thread5 = new ThreadStart(() => fifthFunc(Sample)); 
    ThreadStart Thread6 = new ThreadStart(() => sixthFunc(Sample)); 
    ThreadStart Thread7 = new ThreadStart(() => seventhFunc(Sample)); 
    ThreadStart Thread8 = new ThreadStart(() => eightFunc(Sample)); 
    ThreadStart Thread9 = new ThreadStart(() => ninthFunc(Sample)); 
    ThreadStart Thread10 = new ThreadStart(() => tenthFunc(Sample)); 
    ThreadStart Thread11 = new ThreadStart(() => eleventhFunc(Sample)); 
    ThreadStart Thread12 = new ThreadStart(() => twelveFunc(Sample)); 
    ThreadStart Thread13 = new ThreadStart(() => thirteenFunc(Sample)); 
    Thread[] mainThread = new Thread[13]; 
    mainThread[0] = new Thread(Thread1); 
    mainThread[1] = new Thread(Thread2); 
    mainThread[2] = new Thread(Thread3); 
    mainThread[3] = new Thread(Thread4); 
    mainThread[4] = new Thread(Thread5); 
    mainThread[5] = new Thread(Thread6); 
    mainThread[6] = new Thread(Thread7); 
    mainThread[7] = new Thread(Thread8); 
    mainThread[8] = new Thread(Thread9); 
    mainThread[9] = new Thread(Thread10); 
    mainThread[10] = new Thread(Thread11); 
    mainThread[11] = new Thread(Thread12); 
    mainThread[12] = new Thread(Thread13); 
    foreach (Thread myThread in mainThread) 
    { 
     //ThreadPool.SetMaxThreads(26, 26); 
     //p.Refresh(); 
     //Console.WriteLine("Before start: {0}", p.Threads.Count); 
     myThread.Start(); 
    } 
} 

firstFunc, secondFunc ....包含硒C#代碼。

注意:我已經嘗試使用ThreadPool.SetMaxThreads但它不成功。

例如,如果txt文件包含20個數據,那麼我的電腦將不會響應,但如果它只包含5個或更少,那麼即使我遇到一些滯後,它也可以工作。

我想要的是能夠處理txt文件中的任何數量的數據。

更新

的firstFunc包含此:

    var driverService1 = PhantomJSDriverService.CreateDefaultService(); 
        driverService1.HideCommandPromptWindow = true; 
        var driver1 = new PhantomJSDriver(driverService1); 
        driver1.Navigate().GoToUrl("http://sample.com"); 
        driver1.FindElement(By.Id("urlInput")).SendKeys(Domain); 
        driver1.FindElement(By.ClassName("convert-url")).Click(); 
        var wait1 = new WebDriverWait(driver1, TimeSpan.FromSeconds(10)); 
        wait1.Until(ExpectedConditions.ElementExists(By.XPath("//*[@class='alert alert-success alert-dismissible fade in']//p//input"))); 
        System.Threading.Thread.Sleep(2000); 
        val1 = driver1.FindElement(By.XPath("//*[@class='alert alert-success alert-dismissible fade in']//p//input")).GetAttribute("value"); 
        if (Results.InvokeRequired) 
        { 
         Results.Invoke(new MethodInvoker(delegate { Results.Items.Add(DomainSearch + " => " + "http://sample.com => " + val1); })); 
        } 
        driver1.Quit(); 
        driverService1.Dispose(); 
+0

每一個'firstFunc','secondFunc'等都在做什麼?他們是否返回一個值(因爲它們包含名稱中的「Func」)還是隻是在執行一個操作? – Enigmativity

+0

所以你正在返回的東西。這些都是funcs嗎? – Enigmativity

+0

他們都一樣 – jt25

回答

1

你可以簡單地使用Parallel

var options = new ParallelOptions(); 
options.MaxDegreeOfParallelism = 5; 

Parallel.Invoke(options, 
() => firstFunc(Sample), 
() => secondFunc(Sample), 
() => thirdFunc(Sample), 
    ... 
); 

或者Task.Factory

ThreadPool.SetMaxThreads(5, 1000); 

Task[] tasks = new Task[3] { 
    Task.Factory.StartNew(() => firstFunc(Sample)), 
    Task.Factory.StartNew(() => secondFunc(Sample)), 
    Task.Factory.StartNew(() => thirdFunc(Sample)), 
    ... 
}; 

Task.WaitAll(tasks); 
+0

這是我需要使用Parallel實現它的所有代碼嗎? – jt25

+0

是的,在Parallel或Task.Factory中,不需要處理線程。 –

+0

我想我的唯一選擇是使用線程,因爲即使我只使用一個數據,它也非常慢。 – jt25