List.OfType()速度,替代数据结构

Ond*_*lka 0 c# linq collections complexity-theory oftype

看看这段代码.

interface ILoader
{
}

interface ILoader<T>: ILoader
{
    T Load();
}

class CarLoader: ILoader<Car>
{
    ...
}

class TrainLoader: ILoader<Train>
{
    ...
}

class Container
{
     List<ILoader> loaders = new ILoader[] { new CarLoader(), new TrainLoader()};

     public T Load<T>()
     {
         // Finding right loader
         var loader = loaders.OfType<ILoader<Car>>.FirstOrDefault();
         return loader.Load();
     }
}
Run Code Online (Sandbox Code Playgroud)

我有大约100个装载机,我需要加载很多火车,汽车等.我认为装载机列表非常慢(有OfType()线性复杂性??),你建议使用什么而不是列表?Dictionary<Type,ILoader>Hashtable<Type,ILoader>HashSet<ILoader>?例如使用hashset.OfType<ILoader<Car>>(),列表或更快的速度有多快?

Jon*_*eet 6

Dictionary<Type, ILoader>使用加载器构建并填充它.然后你可以这样做:

ILoader<T> loader = (ILoader<T>) loaderDictionary[typeof(T)];
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您只需要查看100个项目,即使线性扫描也不会花费很长时间.您是否真的对真实使用情况进行了基准测试并发现这是您的瓶颈?