首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列性能/优化

阵列性能/优化
EN

Stack Overflow用户
提问于 2009-11-02 20:36:28
回答 3查看 775关注 0票数 0

我正在读取CSV文件,并希望将结果缓存到数组中。

这是我的getter/setter:

代码语言:javascript
复制
private RedirectionRule[] RedirectionRules
{
    get
    {
        if (_redirectionRules == null)
        {
            return new RedirectionRule[MAXLENGTH];
        }

        return _redirectionRules;
    }
    set
    {
        _redirectionRules = value;
    }
}

这是缓存结果的最佳方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-02 20:41:46

_redirectionRulesnull时,我不认为在getter中返回新数组有多大意义。如果您在解析CSV的代码中设置了该属性,那么它将被缓存。

换句话说,在某个地方,您应该有一个这样的函数来解析CSV数据(例如,我将它放在RedirectionRule类中,但您可以有一个RedirectionRuleParser类或类似的类,这取决于您的需求):

代码语言:javascript
复制
class RedirectionRule {
    public static RedirectionRule Parse(string text) {
        // some code here to parse text for your RedirectionRule object
    }

    public static RedirectionRule[] ParseCsv(string csv) {
        string[] values = csv.Split(',');
        RedirectionRule[] rules = new RedirectionRule[values.Length];

        for (int i = 0; i < values.Length; i++) {
            rules[i] = RedirectionRule.Parse(values[i]);
        }
    }
}

然后,如果你在某个地方有这样的代码,你就是在缓存数据:

代码语言:javascript
复制
string csv = "RuleType1,RuleType1,RuleType1";
RedirectionRules = RedirectionRule.ParseCsv(csv);

在其他地方,您希望访问已缓存的数据:

代码语言:javascript
复制
if (RedirectionRules != null) {
    // do something with your cached data
} else {
    // I don't know, throw an exception or something
}

通过在属性的getter中创建一个新的RedirectionRule[MAXLENGTH]数组,示例代码能够完成的唯一一件事就是偷偷通过上面的RedirectionRules != null检查,从而打开了访问看似已缓存但实际上是凭空产生的数据的可能性。

票数 1
EN

Stack Overflow用户

发布于 2009-11-02 20:55:25

我不确定我真的理解了这个问题,因为我不确定您问的是以下哪一个问题

  1. 是否可以对显示的代码进行任何优化?
  2. 是一个数组缓存结果的最佳容器?
  3. 将csv加载到此容器的最佳方法是什么?

也许你问了所有3个问题,所以我会尽我所能回答所有3个问题。

  1. 每次检查getter中的空值并不是最好的做法。我建议你在构造器中初始化它。
  2. 是的,数组对我来说很好,我想你必须提供更多的信息才能完整地回答这个问题。String.Split会将你的csv转换成string[],这是我通常会做的。
票数 1
EN

Stack Overflow用户

发布于 2009-11-02 20:42:25

一般来说,很难说,这取决于你到底需要什么。

另一种想法是:当您在getter中创建完整大小的数组时,为什么还需要setter呢?为了保持数组的整洁,应该只有一个创建数组的位置。

然后-当你创建数组一次,这是肯定的,为什么不在构造函数中创建它呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1661060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档