У меня много объектов. Я должен оценить одного из своих членов. Они один за другим. Первый оценивает их один за другим --------> псевдокод
while (anyObjectExists)
{
Class1 obj = getObject();
double evalNum = eval(obj.member1);
}
но eval - это трудоемкий метод. и многие объекты имеют одинаковый member1. member1 - это массив типа sbyte. Поэтому я попытался найти другой путь. Это был мой путь: -------> псевдокод
HashTable evaluatedObject = new HashTable();
while(anyObjectExists)
{
Class1 obj = getObject();
if (evaluatedObjects.Contain(obj))
{
double evalNum = evaluatedObjects[obj];
}
else
{
double evalNum = eval(obj.member1);
evaluatedObjects.Add(obj, evalNum);
}
}
Я знал, что должен переопределить метод getHashCode и Equals для sbyte. Как видите, метод eval использует только member1 из Class1. Таким образом, я добавил методы в свой Class1 следующим образом
public override int GetHashCode()
{
return 1;
}
public override bool Equals(Object compareState)
{
if (!this.member1.SequenceEqual(((Class1)compareState).member1))
return false;
return true;
}
Ok. Я думал, что это сделано. Но когда я запускаю свою программу ... это чертовски медленная программа. Это намного медленнее, чем первая программа. Я проверял это. Он может найти добавленные объекты. В этом нет ничего плохого. Но это очень, очень медленно. Я хоть хеш могу извлечь данные в 1 или 2 кадра. Что я не прав?
Любая помощь будет приветствоваться.