"Указанный тип должен быть структурой, не содержащей ссылок" с использованием TeaFiles.NET

Я нашел эту убедительную библиотеку под названием TeaFiles.NET.

Я пишу очень простое консольное приложение, чтобы проверить его.

Вот код:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting....");

            string filename = String.Format("History_{0}.{1}.{2}.tea",
                                               DateTime.Now.Year,
                                               DateTime.Now.Month,
                                               DateTime.Now.Day);

            File.Delete(filename);
            using (var tf = TeaFile<HistoryRow>.Create(filename))
            {
                var items = new List<HistoryRow>();

                for (int i = 0; i < 1000; i++)
                {
                    for (int k = 0; k < 100000; k++)
                    {
                        items.Add(new HistoryRow()
                        {
                            Flags = 192,
                            Name = "Name_" + i.ToString(CultureInfo.InvariantCulture),
                            Value = k,
                            Timestamp = DateTime.Now.AddTicks((long)i)
                        });
                    }
                }

                var sw = Stopwatch.StartNew();
                Console.WriteLine("Initiate write...");
                tf.Write(items);
                sw.Stop();
                Console.WriteLine("...completed write in {0} ms.", sw.ElapsedMilliseconds);
            }

            Console.ReadLine();

        }
    }

    struct HistoryRow
    {
        public string Name;
        public dynamic Value;
        public Time Timestamp; 
        public int Flags;
    }

Это должно быть довольно просто. Вместо этого он вызывает ошибку при вызове Create() со следующей ошибкой:

"The specified Type must be a struct containing no references".

Я действительно не знаю, с чего начать устранение неполадок....

1 ответ

Решение

TeaFiles обеспечивают быстрый доступ для чтения / записи данных временных рядов. Учитывая, что библиотека требует struct содержащий то, что @dtb описывает как blittable типы, это должно работать:

[StructLayout(LayoutKind.Sequential, Pack=1)]
struct HistoryRow
{
    public char[16] Name;
    public double Value;
    public Time Timestamp; 
    public int Flags;
}

Обратите внимание, что при хранении временных рядов вы, как правило, не сохраняете описание со значением, которое является одним из многих значений в столбце, который уже имеет имя.

Другие вопросы по тегам