У меня есть список 15000000 имен пользователей в текстовом файле, и я написал метод для создания из него мозгового кошелька, чтобы проверить, есть ли какой-либо адрес со списком из 600 адресов. Это очень похоже на это
private static List<string> userList = new List<string>(File.ReadAllLines(@"C:\Users\Erik\Desktop\InfernoUser-workspace-db.txt"));
private static List<string> enterpriseUserList = new List<string>(File.ReadAllLines(@"C:\Users\Erik\Desktop\InfernoEnterpriseUser-local-db.txt"));
foreach (var i in userList)
{
userid = ToAddress(i);
if (enterpriseUserList.Contains(userid))
Console.WriteLine(i,userid);
{
private string ToAddress(string username)
{
string bitcoinAddress = BitcoinAddress.GetBitcoinAdressEncodedStringFromPublicKey(new PrivateKey(Globals.ProdDumpKeyVersion, new SHA256Managed().ComputeHash(UTF8Encoding.UTF8.GetBytes(username), 0, UTF8Encoding.UTF8.GetBytes(username).Length), false).PublicKey);
}
Метод хэширования имени метода ToAddrsess в строку SHA256, получить его открытый ключ и преобразовать его в адрес следующим образом:
15hDBtLpQfcbrrAFupWjgN5ieHeEBd8mbu
Этот код - задница, работает очень медленно, обрабатывает около 200 строк данных в секунду. Поэтому я пытаюсь улучшить его, используя многопоточность
private static void CheckAddress(string username)
{
var userid = ToAddress(username);
if (enterpriseUserList.Contains(userid))
{
Console.WriteLine(i,userid);
}
}
private static void Parallel()
{
List<string> items = new List<string>(File.ReadLines(@"C:\Users\Erik\Desktop\InfernoUser-workspace-db.txt"));
ParallelOptions check = new ParallelOptions() { MaxDegreeOfParallelism = 100 };
Parallel.ForEach<string>(items, check, line =>
{
CheckAddress(line);
});
}
Это не сильно помогло. Кто-нибудь может подсказать, как это импровизировать? сравните с vanitygen, работающим на CPU, который может обрабатывать 4-500 тыс. адресов в секунду. Как это может иметь такое большое значение?