Я использую 2 цикла, чтобы получить все слова из моего словаря , соответствующего шаблону. Он работает правильно, но проблема в том, что он говорит около 10 секунд, чтобы завершить операцию. Мне нужно повысить производительность, чтобы я мог более эффективно обрабатывать данные.
Сначала я использовал цикл foreach для своей работы, но узнал, что циклы for лучше выполняются, чем цикл foreach, поэтому я изменил циклы нацикл for, но время выполнения по-прежнему не заметно отличается. Я также пробовал циклы Parallel.ForEach , но они для меня неосуществимы, поскольку мне нужно показать некоторые случайные данные после выполнения метода, чтобы он выдавал ошибку, поскольку цикл все еще работал параллельно.
Здесь stringdata - это список строк, который содержит все возможные комбинации из 9 букв, поэтому он содержит около 500 комбинаций из 9 букв, которые имеют строковый тип. Словарь - это мой словарь, который содержит словарь слов и содержит около 100000 слов данных и имеет свойство строкового типа «Слово»
Вот полный код, который я использую:
Я использовал Facet для поиска комбинаций по этой ссылке:
https://www.codeproject.com/Articles/26050/Permutations-Combinations-and-Variations-using-C-G
List<string> lst = new List<string>();
for (var i = a; i < j; i++)
{
lst.Add(i.ToString);
}
string data2 = string.Join("", lst);
List<char> lstchar = data2.ToCharArray().ToList();
List<string> stringdata = new List<string>();
for (int i = 2; i <= lst.Count; i++)
{
var combis = new Facet.Combinatorics.Combinations<Char>(
lstchar, i, Facet.Combinatorics.GenerateOption.WithoutRepetition);
stringdata.AddRange(combis.Select(c => string.Join("", c)));
}
for (int i = 0; i < stringdata.Count; i++)
{
var dat = stringdata[i].ToCharArray().GroupBy(x => x).ToList();
var aa = Dictionary.Where(x => x.Word.Length == stringdata[i].Length)
.Select(x => x);
for (int j = 0; j < dat.Count; j++)
{
aa = aa.Where(
x => x.Word.ToLower().Contains(dat[j].Key.ToString().ToLower()) &&
x.Word.ToLower().ToCharArray().Count(y =>
y.ToString() == dat[j].Key.ToString().ToLower()
) == dat[j].Count()).ToList();
}
TempDictionary.AddRange(aa);
}
Я хочу повысить производительность своей программы, чтобы я мог получать данные в 2 раза. -3 секунды вместо 10 секунд