|
|
|
C# WinApp HttpClient Stream รบกวนช่วยดูโค้ดให้หน่อยครับ |
|
|
|
|
|
|
|
Code (C#)
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
try
{
int rowIndex = i;
// Task t = factory.StartNew( async()=> {
var client = new HttpClient();
long? totalByte = 0;
string name = txtOutput.Text + "\\" + dataGridView1[1, rowIndex].Value.ToString() + ".mp4";
string nameTemp = Path.GetTempPath() + "SongLoad\\" + dataGridView1[1, rowIndex].Value.ToString() + ".mp4";
string nameMP3 = txtOutput.Text + "\\" + dataGridView1[1, rowIndex].Value.ToString() + ".mp3";
if (File.Exists(name) || File.Exists(nameMP3))
{
dataGridView1.Invoke((MethodInvoker)(() => dataGridView1[5, rowIndex].Value = 100));
// return;
}
else
{
Directory.CreateDirectory(Path.GetDirectoryName(nameTemp));
Directory.CreateDirectory(Path.GetDirectoryName(name));
var vid = youTube.GetVideo(dataGridView1[2, rowIndex].Value.ToString());
dataGridView1.Invoke((MethodInvoker)(() => dataGridView1[5, rowIndex].Value = 0));
long totalbytes = 0;
long collectedbytes = 0;
using (Stream output = File.OpenWrite(nameTemp))
{
using (var request = new HttpRequestMessage(HttpMethod.Head, vid.Uri))
{
totalByte = client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result.Content.Headers.ContentLength;
}
totalbytes += (long)totalByte;
using (var input = await client.GetStreamAsync(vid.Uri))
{
byte[] buffer = new byte[16 * 1024];
int read;
int totalRead = 0;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
totalRead += read;
collectedbytes += read;
long x = collectedbytes * 80 / totalbytes;
// this.toolStripStatusLabel1.Text = TORServices.PathFile.FileTor.bytetobigger(collectedbytes) + "/" + TORServices.PathFile.FileTor.bytetobigger(totalbytes);
dataGridView1.Invoke((MethodInvoker)(() => dataGridView1[5, rowIndex].Value = (int)x));
}
}
}
if (SoundOnly.Checked)
{
_ = Task.Run(() => ConverttoMp3(nameTemp,nameMP3));
}
else
{
try
{
File.Move(nameTemp, name);
dataGridView1.Invoke((MethodInvoker)(() => dataGridView1[5, rowIndex].Value = 100));
}
catch { }
}
this.toolStripProgressBar1.Value++;
client.Dispose();
}
// }, cts.Token);
// tasks.Add(t);
}
catch
{
dataGridView1.Invoke((MethodInvoker)(() => dataGridView1[5, i].Value = 100));
}
}
จากโค้ดข้างต้น เหมือนว่ามันจะโหลดเร็วแค่ช่วงแรกๆ พอหลังๆ หรือผ่านไปซัก 20 กว่านาที การทำงานเริ่มช้าลง ครับ
ทั้งๆที่ ข้อมูลไฟล์ชุดเดิม แต่ได้ เราปิด แล้ว เปิด ใหม่มา มันก็จะโหลดเร็วขึ้นอีก
Tag : .NET, Win (Windows App), C#
|
|
|
|
|
|
Date :
2021-07-01 17:33:37 |
By :
lamaka.tor |
View :
1029 |
Reply :
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อภิมหากาพย์ coding on youtube
ผมไม่เคยจู่โจม youtube แบบนี้มาก่อนจึงให้คำตอบไม่ได้
เดา ส่วนที่ทำให้ youtube server จำกัดความเร็วในการส่งกลับข้อมูล รวมไปถึงการตัด connection ในที่สุด คือ
Code (C#)
using (var input = await client.GetStreamAsync(vid.Uri))
{
// ...ส่วนนี้ทั้งยวง
}
จึงค่อนข้างมันใจว่าโค้ดฝั่งเราไม่น่ามีปัญหา
แต่อย่ที่การจำกัดจำนวน request ของ youtube เอง
ดังนั้น คิดว่าเราทำอะไรไม่ได้ เว้นแต่จะใช้ api
|
|
|
|
|
Date :
2021-07-02 16:36:26 |
By :
TheGreatGod_of_Death |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ณ ปัจจุบัน ก็ยังไม่เข้าใจความต้องการของคุณ TOR 55 ว่าจะทำเพื่ออะไร
ไม่ใช่ว่าทำแล้วไม่ดี ไม่มีประโยชน์ แต่เห็นความสามารถแล้ว ผมว่า
คุณ TOR ศึกษาเรื่อง web และ api ต่างๆ เขียนโปรแกรมขายยังได้เลย
หรือเขียน Tool สวยๆขายสบายๆ
"หรือว่าเขียนเอามัน 55"
ปล. ผู้ใช้จะมองเห็นประโยชน์ ส่วนผู้ไม่ได้ใช้จะมองไม่เห็น อย่าว่ากันเด้อครับผม คนเกินร้อย เมืองร้อยเกิน
|
|
|
|
|
Date :
2021-07-02 17:01:09 |
By :
บัญดิษฐ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ประวัติการแก้ไข 2021-07-03 08:48:50
|
|
|
|
Date :
2021-07-03 08:45:10 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|