Werfen Sie einen Blick auf diesen Code.List.OfType() Geschwindigkeit, alternative Datenstrukturen
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();
}
}
Ich habe über 100 von Ladern, und ich brauche viele Züge zu laden, Autos, etc. Ich denke, dass Liste der Lader sehr langsam ist (hat OfType()
lineare Komplexität ??), was tun Sie schlagen vor, anstelle der Liste zu verwenden? Dictionary<Type,ILoader>
oder Hashtable<Type,ILoader>
oder HashSet<ILoader>
? Wie schnell wäre es zB hashset.OfType<ILoader<Car>>()
zu verwenden, genauso wie Liste oder schneller?
'OfType' ist definiert als eine Erweiterungsmethode für' IEnumerable', nicht als Instanzmethode auf 'List ' oder einer anderen Sammlung. Solange also die BCL-Designer keine Optimierungen für bestimmte Sammlungen vornehmen, wird die Performance nicht variieren, wenn sie gegen die 'List <>' oder das HashSet <> 'verwendet wird. –