Есть ли у вас возможность изменить структуру данных, в которой хранятся ваши продукты? Один из способов ускорить поиск в Contains - сохранить каждую возможную подстроку Product.Title
в Dictionary<string, List<Product>>
. Это позволит вашему поиску быть O (1) вместо O (n).
Вы можете сгенерировать каждую подстроку так:
public static IEnumberable<string> AllSubstrings(this string value)
{
int index = 0;
while(++index <= value.Length)
{
yield return value.Substring(0, index);
}
index = 0;
while(++index <= value.Length - 1)
{
yield return value.Substring(index);
}
}
Тогда вы можете заполнить свой словарь так:
var titleIndex = new Dictionary<string, List<Product>>();
foreach(Product product in products)
{
foreach(string substring in product.Title.AllSubstrings())
{
if(titleIndex.ContainsKey(substring))
{
index[substring].Add(product);
}
else
{
index[substring] = new List<Product> { product };
}
}
}
И, наконец, вы выполняете поиск следующим образом:
string searchString = itemnames[rnd.Next(itemnames.Length)];
if(titleIndex.ContainsKey(searchString))
{
List<Product> searchResults = titleIndex[searchString];
}
Примечание: Как вы уже догадались, для хранения таких данных требуется больше времени ЦП и больше оперативной памяти.