首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetType() ==类型性能

GetType() ==类型性能
EN

Stack Overflow用户
提问于 2011-09-03 01:50:02
回答 3查看 394关注 0票数 1

我正在制作一个XNA游戏,我每次更新都会调用下面的代码2到20次。我试着用谷歌搜索,似乎有点慢,所以我想问一下有没有更快的方法来比较类型?

代码:

代码语言:javascript
复制
    public Modifier this[Type type]
    {
        get
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].GetType() == type)
                {
                    return this[i];
                }
            }

            throw new NotImplementedException("Fix this");
        }

        set
        {
            for (int i = 0; i < this.Count; i++)
            {
                if (this[i].GetType() == type)
                {
                    this[i] = value;
                }
            }

            if(System.Diagnostics.Debugger.IsAttached)
                System.Diagnostics.Debugger.Break();
        }
    }

这段代码是在继承自列表的ModifierCollection类中编写的。修改器是粒子引擎的一部分。另外,我的游戏还不能真正测试它,所以我不能测试它,但是它应该可以工作吧?

我读到一些关于RunTimeTypeHandles的东西,它应该更快,我应该使用它吗?

编辑:我的目标是可以做到以下几点:

代码语言:javascript
复制
    (particleEffect["NameOfEmitter"].Modifiers[typeof(SomeCoolModifier)] as SomeCoolModifier).Variable = Value;

基本上,我只想在运行时更改一些修饰符的值。

编辑2:我刚刚意识到我可以将修饰符的引用保存到我现在所在的类,调用这个:P如果我有5-10个修饰符,可能不是干净的代码,但应该删除这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-03 01:56:53

如果不需要Type公开的任何额外功能,并且只关心类型之间的绝对相等--即不需要支持继承--RuntimeTypeHandle是进行这种比较的最快方法。

不过,我真的会质疑这是否是您的类设计的一个弱点。除非有令人信服的理由直接检查类型,否则在对象上公开表示它们是什么的某种值(可能是枚举)并与之进行比较可能更好。

票数 4
EN

Stack Overflow用户

发布于 2011-09-03 01:53:48

您可以将这些值存储在按类型索引的字典中,而不是列表中,这样就不必每次都对列表执行O(n)迭代。

正如评论中所指出的,这确实取决于n的大小,并且可能是一个微优化。我建议分析你的应用程序。

票数 0
EN

Stack Overflow用户

发布于 2011-09-03 02:01:50

如果你想变得更快,并且可以信任调用你的代码,那么把索引器改成只接受int类型。然后,在调用者用来向列表中添加类型的任何方法(您没有显示)中,将相应的int返回给它们。这是一个更糟糕的API,但它意味着你不需要做任何循环或查找。

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

https://stackoverflow.com/questions/7287354

复制
相关文章

相似问题

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