【问题标题】:C# large numbers of static numerical arraysC# 大量静态数值数组
【发布时间】:2013-04-29 19:56:34
【问题描述】:

我正在开发的一个 Office 插件将包含几十个 120 长度的双精度数组(静态)。我可以用一堆静态成员数组创建一个类并使用数组初始化器,但这看起来有点难看。对我来说,能够将这些存储在资源文件中是有道理的,但它并没有任何适合的选项。最接近的选项是“文本文件”,但是每次我想使用它时我都必须解析每个数组,或者构建一个惰性加载器(这看起来很不优雅)。有更好的选择吗?

(对于好奇,数组是死亡率表。)

【问题讨论】:

  • 你应该定义“更好的选择”。您提到的每种方法都有优点和缺点。您要优化什么:易于维护、性能...?
  • 为什么不将数据存储在外部文件中,以便在不重新编译的情况下对其进行调整?
  • @DanJ 我想同时优化性能、易于维护和“正确地做”(即,如果 Visual Studio 有一个功能可以做我想做的事,使用它而不是自己滚动)。在这个问题中,我已经定义了我认为据我所知的优化问题的有效边界,并想知道是否有超出该边界的任何东西。

标签: c# visual-studio office-addins


【解决方案1】:

我会亲自将它们设为静态类的静态成员,并将数据放入 ini 文件中。向类添加一个布尔值以指示数组是否已初始化(或者您可以逐个数组地执行此操作),并且在您访问该类的所有文件中进行检查以确保它已初始化,如果没有,请调用读取文件并将数据加载到数组中的方法。加载数据的方法真的不应该那么乱,而且是一个相当琐碎的操作。

此方法还为您提供对数据的命名空间访问(如果您有正确的 using 语句/构建依赖项,则为全局)。

【讨论】:

  • 我感觉 Alex 想要一个 DLL 中的所有数据和代码,因此无法访问在插件安装不正确或其他情况下可能丢失的其他文件。
【解决方案2】:

为什么不使用字符串资源。读取该字符串,用逗号分隔并解析每个数字。读取字符串后,所有的分离和解析都可以在一行 LINQ 中完成。

例子:

        string myResource = "1, 2, 3.4, 5.6";
        double[] values = myResource.Split(',').Select(Convert.ToDouble).ToArray();

否则,您可以将带有双精度的数组序列化为一个二进制文件,然后在您的代码中反序列化它。

如果解析是您的主要关注点(因为速度),请将结果本地存储在私有缓存中。每次请求数组时,只需对其进行克隆即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2012-05-04
    • 2013-12-03
    • 2010-10-07
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多