データセットの行をループして、アクティブスペース環境に挿入しています(tibco、そのインメモリデータベースによる)。これが私がやっている方法です。
これを回避するためのより速い方法はありますか?
行を分割してから各パーティションを並列化することを考えていましたが、それで高速になるかどうかはわかりません。
System.Threading.Tasks.Parallel.ForEach(
dataSet.Tables[0].Rows,
currRow =>
{
var tuple = Com.Tibco.As.Space.Tuple.Create();
for (int i = 0; i < currRow.Values.Length; i++)
{
if (currRow.Values[i] != null)
{
var k = ConvertToAny(currRow.Values[i].ToString());
if (k.GetType().IsEquivalentTo(typeof(DateTime)))
{
tuple.Put(dataSet.Tables[0].ColumnNames[i], (DateTime)k);
}
else if (k.GetType().IsEquivalentTo(typeof(double)))
{
tuple.Put(dataSet.Tables[0].ColumnNames[i], (double)k);
}
else
{
tuple.Put(dataSet.Tables[0].ColumnNames[i], k.ToString());
}
}
}
try
{
inSpace_.Put(tuple);
}
catch (Exception e)
{
}
}
);
誰かが助けてくれるなら、私は一度に約1000でそれをバッチ処理することを考えています:(
編集:
リストtuplesToAdd=new List(); for(int i = 0; i <dataSet.Tables [0] .Rows.Length; i ++){var tuple = Com.Tibco.As.Space.Tuple.Create();
for (int j = 0; j < dataSet.Tables[0].Rows[i].Values.Length; j++)
{
if (dataSet.Tables[0].Rows[i].Values[j] != null)
{
var k = ConvertToAny(dataSet.Tables[0].Rows[i].Values[j].ToString());
if (k is DateTime)
{
tuple.Put(dataSet.Tables[0].ColumnNames[j], (DateTime)k);
}
else if (k is Double)
{
tuple.Put(dataSet.Tables[0].ColumnNames[j], (Double)k);
}
else
{
tuple.Put(dataSet.Tables[0].ColumnNames[j], k.ToString());
}
}
}
tuplesToAdd.Add(tuple);
if (i % 100000 == 0 || i == dataSet.Tables[0].Rows.Length - 1)
{
ThreadStart TUPLE_WORKER = delegate
{
inSpace_.PutAll(tuplesToAdd);
};
new Thread(TUPLE_WORKER).Start();
tuplesToAdd.Clear();
}
}
(バッチ処理によって)それを実行しようとする私の新しい方法があります