C# 使用 PartitionedTableAppender添加数据 量大时会报数组索引越界错误

直接贴代码

            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

请先 登录 后评论

1 个回答

minxingzou

麻烦用下debug版本的c # api,打印下Exception的函数栈以及行号。

请先 登录 后评论
  • 1 关注
  • 0 收藏,883 浏览
  • worm 提出于 2022-04-27 11:19

相似问题