1

我有一个看起来像这样的方法:

public void SomeMethodThatLoadsUserData()
{
   Method1();
   Method2();
   Method3();
   .....
   Method12();
}

这些会在用户登录时执行,并且每个方法都会获取一些与用户相关的数据。我想知道让这些并行运行是否会带来任何性能优势,因为每个方法最终都会调用对同一个数据库文件的查询。而且,如果有性能优势,我将如何重写这段代码?

感谢您的建议。

4

2 回答 2

1

以下代码演示了使用 Thread 和 Stopwatch 对象列表的并行测试。我认为这是一个很好的测试方法,因为它保证了并行执行尝试(与 Parallel.Invoke 不同),并且比使用 ThreadPool IMO 更容易设置。

public static void SomeMethodThatLoadsUserData()
{
    Stopwatch s = new Stopwatch();
    s.Start();

    List<Thread> threads = new List<Thread> {new Thread(Method1), new Thread(Method2)};

    foreach (Thread thread in threads)
    {
        thread.Start();
    }

    foreach (Thread thread in threads)
    {
        thread.Join();
    }

    s.Stop();
    Console.WriteLine("Total: {0} ms", s.ElapsedMilliseconds);

    Console.ReadKey();
}

private static void Method1()
{
    Stopwatch s = new Stopwatch();
    s.Start();
    // do work
    Thread.Sleep(1000);
    s.Stop();
    Console.WriteLine("Method 1: {0} ms", s.ElapsedMilliseconds);
}

private static void Method2()
{
    Stopwatch s = new Stopwatch();
    s.Start();
    // do work
    Thread.Sleep(1000);
    s.Stop();
    Console.WriteLine("Method 2: {0} ms", s.ElapsedMilliseconds);
}

输出:

Method 1: 999 ms
Method 2: 999 ms
Total: 1051 ms

Total当(希望)小于每种方法的总和时,将显示任何时间节省。

于 2012-07-22T21:31:15.003 回答
-2

我不知道这是否是最快或最好的方法,但您可以将每种方法转入一个新线程。

Thread t = new Thread(() => Method1());
t.Start();
于 2012-07-22T19:48:55.140 回答