首页 > 解决方案 > 自动递增抽象基类的 typeid

问题描述

所以我有一个Dictionary<Type, ...>已经成为一个紧密循环的瓶颈。我想取消使用Type作为密钥。我很幸运,所有最终在该字典中作为键的类型都实现了一个我可以更改的特定接口,我想我想将它更改为抽象基类。

我认为我最终想要做的是有这样的事情:

public abstract class MyBaseType
{
   public virtual int TypeId { get; }
}

然后我会以某种方式让这个自动增加 TypeId 的派生类。这可能以自动方式进行吗?所以我不必为每个人专门设置一个数字?

我试图避免的事情:

public class MyDerived : MyBaseType
{
   public override int TypeId => 0;
}

public class MyDerived2: MyBaseTYpe
{
   public override int TypeId => 1;
} 
...etc

有任何想法吗?

编辑:这是导致我的瓶颈的类型查找。将其更改为一种类型除了Type实际上会给我带来任何好处吗?有没有可能是因为我一GetHashCode()开始就遇到了瓶颈?Type

再次编辑:在字典索引运算符中,我已将最昂贵的部分缩小到我认为的位置: 探查器

标签: c#dictionary

解决方案


我最终做了(非常重复的)工作以将密钥降低到 int 并且速度并没有提高那么多。这告诉我的是,我只是对我正在执行的工作的成本抱有不切实际的期望。我将研究线程作为查看改进的替代方法。


推荐阅读