Saya memiliki struktur pernyataan Parallel.For dan PLINQ bersarang di aplikasi konsol kecil saya yang pada dasarnya melakukan operasi terikat jaringan (melakukan permintaan http) seperti berikut:
daftar pengguna diisi dari DB lalu saya melakukan hal berikut:
Parallel.For(0,users.count(), index=>{
// here I try to perform HTTP requests for multiple users
});
Kemudian di dalam loop for ini saya melakukan pernyataan plinq untuk mengambil info pengguna ini melalui permintaan HTTP.
Sehingga sekarang total saya mendapatkan dua loop bersarang seperti berikut:
Parallel.For(0,users.count(), index=>{
// Some stuff is done before the PLINQ statement is called...
newFilteredList.AsParallel().WithDegreeOfParallelism(60).ForAll(qqmethod =>
{
var xdocic = new XmlDocument();
xdocic.LoadXml(SendXMLRequestToEbay(null, null, qqmethod.ItemID, true, TotalDaysSinceLastUpdate.ToString(), null));
int TotalPages = 0;
if (xdocic.GetElementsByTagName("TotalNumberOfPages").Item(0) != null)
{
TotalPages = Convert.ToInt32(xdocic.GetElementsByTagName("TotalNumberOfPages").Item(0).InnerText);
}
if (TotalPages > 1)
{
for (int i = 1; i < TotalPages + 1; i++)
{
Products.Add(SendXMLRequestToEbay(null, null, qqmethod.ItemID, false, TotalDaysSinceLastUpdate.ToString(), i.ToString()));
}
}
else
{
Products.Add(SendXMLRequestToEbay(null, null, qqmethod.ItemID, false, TotalDaysSinceLastUpdate.ToString(), "1"));
}
});
});
Saya mencoba menggunakan loop for luar seperti yang biasa, dan saya perhatikan bahwa kinerjanya jauh lebih cepat dan lebih baik daripada seperti ini.
Yang paling membuat saya khawatir di sini adalah saya memeriksa pemanfaatan CPU saat menjalankan aplikasi konsol seperti ini, selalu sekitar 0,5-3% dari total daya CPU...
Jadi cara saya mencoba melakukan permintaan HTTP adalah seperti ini:
15 pengguna sekaligus * jumlah permintaan HTTP untuk 15 pengguna tersebut.
Apa yang saya lakukan salah di sini?
Products
, jika itu hanyaList<T>
kelas itu tidak aman untuk thread dan Anda merusak kelas saat Anda menulisnya dengan beberapa thread secara bersamaan. - person Scott Chamberlain   schedule 01.02.2017Parallel.xxx
panggilan tidak akan mengubah konfigurasi jaringan... Anda mungkin lebih tertarik pada stackoverflow.com/questions/1361771/ - person Alexei Levenkov   schedule 01.02.2017