【问题标题】:C# export / write multidimension array to file (csv or whatever)C# 导出/写入多维数组到文件(csv 或其他)
【发布时间】:2011-10-12 23:41:37
【问题描述】:

嗨,我正在设计一个程序,我只是想就将 multiDim 数组写入文件提出建议。 我正在使用 XNA 并且有一个包含 Vector3(x, y, z) 的多维数组。

有十万个值,如果不是数百万个,我希望能够将它们保存在一个文件中(保存游戏关卡)。我对一个想法没有偏见,我只需要存储数据......就是这样!我正在使用 XMLSerializer 及其工作奇迹。

现在我经常使用 xml 序列化程序,并且了解到您无法导出 MultiDim 数组......这很令人沮丧(但我相信有一个很好的理由 - 希望如此)。我玩 Jagged's 时运气不好。

使用过 System.IO.File.WriteAllText 然后很快就发现它只适用于字符串... daahhh

基本上我认为我需要使用 BinaryWrite 方法,重新编写我自己的序列化程序,甚至尝试运行一个 sql 服务器来托管大量数据......愚蠢的想法?请告诉我,你能指出我的写作方向吗?由于我主要有网络(php)背景,因此运行同步数据/级别数据的服务器的想法对我很有吸引力......但可能不适用于这里。

谢谢你,

恶意

【问题讨论】:

    标签: c# arrays xna xmlserializer multidimensional-array


    【解决方案1】:

    只要数组中的对象是可序列化的(IIRC Vector3 是可序列化的),您就可以使用内置的 .NET 序列化器对批次进行序列化。

    void SerializeVector3Array(string filename, Vector3[,] array)
    {
        BinaryFormatter bf = new BinaryFormatter();
        Stream s = File.Open(filename, FileMode.Create);
        bf.Serialize(s, array);
        s.Close();
    }
    
    Vector3[,] DeserializeVector3Array(string filename)
    {
        Stream s = File.Open(filename, FileMode.Open);
        BinaryFormatter bf = new BinaryFormatter();
        Vector3[,] array = (Vector3[,])bf.Deserialize(s);
        s.Close();
        return array;
    }
    

    这应该是你所追求的粗略模板。

    【讨论】:

    • 感谢您的回复,今晚我将尝试您的方式和 Zasz 的建议。非常感谢您的快速回答!
    • 好的,尝试了这种方式,效果很好,只有一个问题...文件大小为 1gb 并且还在增长...flppen heck...可能需要重新考虑像这样存储 vector3。鉴于我正在尝试输出一个数组 [10000,5000] ... 的文件:P
    • 有趣,你的主存不是用完了吗?在这种情况下,请尝试寻找内存占用更少的策略、替代工作流程,尤其是分析您的应用程序。
    • 是的,你完全正确,我现在正在重新考虑程序运行和存储数据的方式。我想过可能会切割成块,但实际上它仍然是一个愚蠢的想法,因为文件大小仍然相同,但也许它在不同时间加载了块等等......我想现在我将使用少量数据并保留休息在公羊中运行。有趣的是,我可以轻松顺利地使用 [10000,5000] 运行程序......鉴于我需要检查 ram 使用情况:P 再次感谢你们非常有帮助
    【解决方案2】:

    你为什么不试试 Json 序列化? Json 的噪音比 XML 小,写入文件时占用的空间更小,特别是如果你这样做没有缩进等。就我的经验而言,它在数组、字典、日期和其他对象方面没有问题。

    我建议使用JSON.NET,如果没有,请查看this thread

    如果 Json.net 发现很难序列化具有许多私有和静态变量的库类,那么编写一个 POCO 类并将库类基本属性映射到您的 POCO 并序列化和来回映射 POCO 是微不足道的.

    【讨论】:

    • 谢谢你的回答,今晚我看看JSON。
    • 好吧,JSON 的文件大小比上面的第一个答案 (BinaryFormatter();) 更小,但它的文件大小仍然相当大......需要开始查看压缩。再次感谢你们的帮助
    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2018-03-08
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多