麻烦用下debug版本的c # api,打印下Exception的函数栈以及行号。
直接贴代码
PartitionedTableAppender appender = new PartitionedTableAppender(klineDb, klinePartName, "date", pool);
var bars = new List<Bar>();
int count = 6; //一次最多可以放5个bar的table
while(count> 0)
{
bars.Add(bar);
count--;
}
var table = common.Tool.BarToTable(bars, DateTime.Now.Date);
List<IEntity> args = new List<IEntity>() { table };
//while (i>0)
{
var starttime = DateTime.Now;
var result = appender.append(table);
Assert.IsTrue(result > 0);
var endtime = DateTime.Now;
Console.WriteLine(endtime - starttime);
i--;
}
bar 的定义
public class Bar
{
public string symbol;
public BarPeriod period;
public int period_time;
public int time;
public long volume;
public double amount;
public float high;
public float open;
public float low;
public float close;
public Bar();
}
当bar数量超过5时报错误
源: UnitTest1.cs 行 69
持续时间: 264 毫秒
消息:
测试方法 DBTest.UnitTest1.TestAddPartKline 引发了异常:
System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
这个数量实在太少了
出差源码地址 api-csharp-master\src\route\PartitionedTableAppender.cs 145行
for (int i = 0; i < threadCount; ++i)
chunkIndices[i].Clear();
List<int> keys = domain.getPartitionKeys(table.getColumn(partitionColumnIdx));
int rows = keys.Count;
for(int i = 0; i < rows; ++i)
{
int key = keys[i];
if (key >= 0)
chunkIndices[i].Add(i);
}
chunkIndices = 5