0
SQL Server分析サービスに対してMDXクエリを実行するコードを作成しています。同じスレッドでMDXクエリが2回実行されていますが、理由はわかりません。クエリは1回だけ実行する必要があります2回実行するC#スレッド/クエリ
以下はコードの一部です。誰でも助けてください。
private void Start_QueryWorkers()
{
foreach (QueryThread th in _QueryWorkers)
{
SSASQuery q = new SSASQuery();
q.QueryText = "SELECT NON EMPTY { [Measures].[count] } ON COLUMNS FROM [cube]";
q.queryThread = th;
th.WorkerThread.RunWorkerAsync(q);
}
}
private void QueryWorkerThread_DoWork(object sender, DoWorkEventArgs e)
{
SSASQuery q = e.Argument as SSASQuery;
OleDbCommand cmd = new OleDbCommand(q.QueryText, q.queryThread.conn);
OleDbDataReader rdr = cmd.ExecuteReader();
rdr.Close();
}
private void btnStartTest_Click(object sender, EventArgs e)
{
string strConnString = "Provider=MSOLAP;Data Source=SRV001" + ";Initial Catalog=Cube_2015" + ";";
_QueryWorkers.Clear();
{
QueryThread thread = new QueryThread(strConnString);
thread.WorkerThread = new BackgroundWorker();
thread.WorkerThread.DoWork += new DoWorkEventHandler(this.QueryWorkerThread_DoWork);
_QueryWorkers.Add(thread);
}
Start_QueryWorkers();
}
}
class SSASQuery
{
public string QueryText { get; set; }
public QueryThread queryThread { get; set; }
}
class QueryThread
{
public QueryThread(string connString)
{
this.connString = connString;
conn = new OleDbConnection(connString);
conn.Open();
queryList = new SortedList();
}
public SortedList queryList { get; set; }
public string threadName { get; set; }
public string connString { get; set; }
public OleDbConnection conn;
public BackgroundWorker WorkerThread { get; set; }
}
}解決
BackgroundWorkerはスレッドではありません。スレッド上では古くなった抽象化です。まるでそれがスレッドであるかのように使用しようとすると、何も得られません。 PLINQ、Parallel.ForEach、またはActionBlockを使用すると、各クエリを並列に実行し、結果を格納するのが簡単になります。 –
こんにちは、ありがとうございます。とにかくDoWork/BackgroundWorkerが上記のコードで2回実行されている理由を助けることができます – DC07
なぜnumThreads = 1の場合に 'for(int i = 0; i
McNets