を使用してParallel.ForEach
、新しいクラスを呼び出して作成しています。
Parallel.ForEach(urlTable.AsEnumerable(),drow =>
{
using (var WCC = new MasterCrawlerClass() )
{
WCC.MasterCrawlBegin(drow);
}
});
MasterCrawlerClass
とが含まれprivate static voids
ていprivate static string
ます。私の質問はこれだと思います。で新しいクラスを呼び出しているので、その新しいクラス インスタンス内foreach
のすべてのvoids
/strings
は安全ですか?
class MasterCrawlerClass : IDisposable
{
public void Dispose()
{
GC.Collect();
}
public static void SetNewProxy()
{
string mysql_Proxyserver_ProxyPort = "select ProxyServer,ProxyPort,ResponseTime FROM proxies.tblproxies where Active = 1 and DateTested >= Date_sub(CurDate(),INTERVAL 2 day) and ResponseTime <= 3 order by Rand() limit 1";
DataTable proxyDT = new DataTable();
proxyDT = DTTable(mysql_Proxyserver_ProxyPort, "mysql_Proxyserver_ProxyPort");
ProxyServer = proxyDT.Rows[0].ItemArray[0].ToString();
ProxyPort = Convert.ToInt32(proxyDT.Rows[0].ItemArray[1].ToString());
}
private static string HTMLModelProcess(string inputString)
{
string returnString = string.Empty;
string ModelString = inputString.Replace("Certified", "").Replace("Used", "").Trim();
string[] makeModelSplit = ModelString.Split(new char[] { ' ' }, 4);
returnString = makeModelSplit[2];
return returnString;
}
private static string ProxyServer { get; set; }
private static int ProxyPort { get; set; }
}
private static DataTable DTTable(string mysqlQuery, string queryName)
{
DataTable DTTableTable = new DataTable();
try
{
MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, MySQLProcessing.MySQLStatic.Connection);
DataTable DataDTTablesDT = new DataTable();
DataDTTables.SelectCommand.CommandTimeout = 240000;
DataDTTables.Fill(DataDTTablesDT);
DTTableTable = DataDTTablesDT;
}
catch (Exception ex)
{
GenericLogging("Failed MySQLquery: " + ex.Message.ToString(), "MySQLProcessor", "DTTable", "", "MysqlError", "", queryName, mysqlQuery);
}
return DTTableTable;
}
MysqlProcessing.Mysqlstatic.Connection は Parallel の前に設定され、決して変更しないでください。
これはvoids
もう少しstrings
です。私はまだ Threading を完全には理解していません。