2

我有大量数据要运行,这需要花费大量时间,所以我认为 Threading 可能会很快为我完成这项工作。

我做什么:从 ASP.NET 前端调用 SQL 存储过程并在那里进行处理,大约需要 30 个小时。

我需要什么:我已将数据分成不同的批次,并为每个批次创建了各自的 SP。现在我要求所有 SP 只需单击一次按钮即可同时运行。

请帮忙!

我使用了下面的代码,但它似乎没有并行运行。

 protected void Button3_Click(object sender, EventArgs e)
    {
        Thread t1 = new Thread(Method1);
        Thread t2 = new Thread(Method2);

        t1.Start();
        t2.Start();

        t1.Join();
        t2.Join();

    }
   void Method1()
    {
        for (int i = 0; i < 10000; i++)
        {
            Response.Write("hello1"+i);
            Response.Write("<br>");
        }
    }

   void Method2()
   {
       for (int i = 0; i < 10000; i++)
       {
           Response.Write("hello2" + i);

       }
   }
4

3 回答 3

5

由于各种原因,您可能不想直接在 ASP.NET 中执行此操作,例如工作进程的执行时间有限。

另请注意,SqlConnection等也有自己的时间限制。

您真正应该做的是将要做的工作排队(使用 IPC 或其他数据库表等),并让计划任务中的 Windows 服务或外部进程之类的东西通过队列提取和处理。

天啊,你甚至可以在 SQL Server 中启动一项工作,并让它直接完成这项工作。

于 2013-06-03T12:54:34.050 回答
1
  • 线程不会神奇地加快你的进程。
  • 如果您不知道自己在做什么,服务器端线程通常不是一个好主意。
  • Sql server 可能会超时 30 小时 :)

30 小时的工作 Asp.net 不是要走的路。这是一个很大的过程,您不应该在 Asp.net 中处理它。作为替代方案,您可能想要编写一个 Windows 服务。将您的参数传递给它(可能使用 msmq 或某种消息传递系统)执行您的流程并将进度发送到 Web 应用程序,并使用 signalR 或 ajax pulls 显示它。

于 2013-06-03T12:56:56.623 回答
1

Narendran,从这里开始:

http://www.albahari.com/threading/

这是我在网上看到的最好的线程教程,相应的书也很好。

确保你花足够的时间完成整个教程(我已经完成了,相信我,值得!)。

如上所述,在这种情况下使用线程类的 Join 方法违背了使用线程的目的。而不是使用连接使用锁(请参阅上面教程中的基本同步)来确保线程同步。

同样如前所述,在执行多线程之前,直接在 SQL Server 上运行这些存储过程并一起运行。如果它们仍然需要 30 个小时才能执行,那么使用 Threading 将无济于事。如果您看到少于 30 小时,那么您可能会从多线程中受益。

于 2013-06-03T13:28:38.573 回答