c# - "The specified Type must be a struct containing no references"使用 TeaFiles.NET

标签 c# exception memory-mapped-files

我发现了这个引人注目的库,名为 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() 调用时出错,并显示以下错误:

“指定的类型必须是不包含引用的结构”。

我真的不知道从哪里开始排除故障......

最佳答案

TeaFiles 提供对时间序列数据的快速读/写访问。鉴于该库需要一个包含 @dtb 描述的 blittable typesstruct ,这应该有效:

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

请注意,在存储时间数据系列时,您通常不会存储带有值的描述,该值是已具有名称的列中的许多值之一。

关于c# - "The specified Type must be a struct containing no references"使用 TeaFiles.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109839/

相关文章:

c# - 子报表 RDLC 数据检索失败

java - 传递不正确的媒体类型时无法捕获 WebApplicationException

c# - 如何在文件写入时尽可能快地复制文件?

asp.net - 在 IIS 中部署时打开内存映射文件会导致 FileNotFoundException

c# - XSD 到数据集(这也是一个 xsd?)

c# - 未使用的属性会导致开销吗?

Python 中的 C# Parallel.Foreach 等价物

java - 查找我的代码中的所有未经检查的异常

c# - CSharpProvider 运行时编译找不到 DLL

c# - 数据结构的最佳存储,用于快速查找和持久化