我有一个过程分析来自一个系统的审计数据以构建另一个系统的报告数据。有一个管理程序循环每天进行分析,并在当前迭代当天调用实体特定的过程。一些实体需要不到一秒的时间来处理,而其他实体可能需要几分钟时间。像在t-sql中一样连续运行,cpu利用率从未在16核心服务器上高于8%。每个实体特定的过程都不依赖于其他实体,只是当天的所有实体在第二天开始前已经完成。如何在SQL过程中并行执行子任务
我的想法是有一个CLR管理过程,并开始在自己的线程上运行一天的较长运行过程,然后一旦快速完成,Thread.Join()长时间运行的线程等待所有实体在继续前进之前完成那一天。
下面是我尝试的最简单的事情,可以只为一个工作线程工作,并调用该线程上的开始不会导致被调用的静态方法。我已经在HelloWorld方法中设置了一个断点,并且它从未被击中。
我已经在控制台应用程序中尝试过非常类似的东西,并且它在AsyncHelloWorld的开始处的注释掉行中的同一线程上调用它。 SQL CLR程序中的线程有什么不同吗?
using System.Threading;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[SqlProcedure]
public static void AsyncHelloWorld()
{
// HelloWorld(SqlContext.Pipe);
var worker = new Thread(HelloWorld);
worker.Start(SqlContext.Pipe);
worker.Join();
}
public static void HelloWorld(object o)
{
var pipe = o as SqlPipe;
if (pipe != null)
pipe.Send("Hello World!");
}
}
你是否有错误,或者什么都没有发生? – Nate 2010-11-30 21:20:01
HelloWorld方法永远不会被调用。 – 2010-11-30 21:51:18