我有一個過程分析來自一個系統的審計數據以構建另一個系統的報告數據。有一個管理程序循環每天進行分析,並在當前迭代當天調用實體特定的過程。一些實體需要不到一秒的時間來處理,而其他實體可能需要幾分鐘時間。像在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