public class Account
{
    public string Type { get; set; }
    public string FullData { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Domain { get; set; }
    public int Errors { get; set; }
    public Result Result { get; set; }
    public string Server { get; set; }
    public int Port { get; set; }
    public Proxy LastProxy { get; set; } = null;

    public Account(string fullData)
    {
        var dataParts = fullData.Split(":");
        FullData = fullData;
        Email = dataParts[0];
        Password = dataParts[1];
        Errors = 0;
        Result = Result.ToCheck;
    }

    public bool SetServer()
    {
        string domain = Email.Split("@")[1];
        Domain = domain;

        try
        {
            string md5 = MD5Helper.Encrypt(domain + "985B5C1D89379FBD141A86AE97169D63").ToUpper();

            if (RetrieveServerSettings(md5, "IMAP") || RetrieveServerSettings(md5, "POP3"))
            {
                return true;
            }

            ViewManager.MainWindow.DomainsForSearchSettings.Add(domain);

            return false;
        }
        catch
        {
            ViewManager.MainWindow.DomainsForSearchSettings.Add(domain);
            return false;
        }
    }

    private bool RetrieveServerSettings(string md5, string serverType)
    {
        OpenConnection();

        SqliteCommand sqLiteCommand = new SqliteCommand($"SELECT Server, Port, Socket FROM '{md5[0]}' WHERE Domain = '{md5}'",
            serverType == "IMAP" ? sqLiteConnectionImap : sqLiteConnectionPop3);

        using (SqliteDataReader sqLiteDataReader = sqLiteCommand.ExecuteReader())
        {
            if (!sqLiteDataReader.Read()) return false;

            Type = serverType;
            Server = sqLiteDataReader.GetString(0);
            Port = sqLiteDataReader.GetInt32(1);
            return true;
        }
    }

    public string Serialize()
    {
        // Serialize the account object to a string
        return JsonConvert.SerializeObject(this);
    }

    public static Account Deserialize(string serializedAccount)
    {
        // Deserialize the string back to an Account object
        return JsonConvert.DeserializeObject<Account>(serializedAccount);
    }
}

public async void GetSQLConnection()
{
    SQLite.OpenConnection();
    await Task.Run(() =>
    {
        foreach (var line in ViewManager.MainWindow.AccountListOld)
        {
            Account account = new Account(line);
            if (account.SetServer())
            {
                ViewManager.MainWindow.AccountListNew.Add(account);
                Application.Current.Dispatcher.BeginInvoke(new ThreadStart(delegate
                {
                    ViewManager.StatisticPage.TextBlock_Statistic_Total.Text = ViewManager.MainWindow.AccountListNew.Count.ToString();
                }));
            } else
            {
                ViewManager.MainWindow.AccountListUnknown.Add(account);
            }
        }

        SQLite.CloseConnection();
        Directory.CreateDirectory(ViewManager.MainWindow.PathToSaveResults);
    });

    ViewManager.StatisticPage.TextBlock_Statistic_ToCheck.Text = ViewManager.MainWindow.AccountListNew.Count.ToString();
}


Я бы хотел ускорить процесс обработки строк, который происходит в методе GetSQLConnection, потому что сейчас, при большом кол-ве строк, иногда приходится ждать по 10 минут до конца обработки. Ответ напиши на русском языке.