powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Опртимизация скорости при побайтовой закачке из интернета
2 сообщений из 2, страница 1 из 1
Опртимизация скорости при побайтовой закачке из интернета
    #38001516
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. пишу чтото типо довнлоад менаджера для своего приложения. ну чтобы если при сбое интернет соединения мое приложение докачивала необходимые файлы а не качала их заного. ну собственно это в этом топике
ну теперь ближе к делу . сделал побайтовую загрузку но скорость обещает желать лучшего.
собственно вот фрагмент кода
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
        Dim request2 As HttpWebRequest = DirectCast(WebRequest.Create(urlFLV), HttpWebRequest)
        request2.Method = "GET"
        request2.UserAgent = "Mozila/5.O (Windows; U; Windows NT 5.1; ru; rv:1.9.0.15) Gecko/2OO912O2O8 Firefox/3.O.16"
        request2.AddRange(40000, fullenght - 1)

        Dim stream2 As Stream = request2.GetResponse().GetResponseStream()
        Dim reader2 As New StreamReader(stream2, System.Text.Encoding.Default)
        Dim n As Long = 40000
        Dim b(0) As Char
        Dim h As Long = 0
        Dim hj(10000) As Byte
        Dim schet As Long = 0
        Do
            schet = schet + 1
            reader2.Read(b, 0, 1)

            hj(schet) = Asc(b(0))
 
            If schet = 10000 Then
                Application.DoEvents()
                FLOut = New FileStream(topath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)
                FLOut.Seek(n - 9999, SeekOrigin.Current)
                FLOut.Write(hj, 1, 10000)
                FLOut.Close()
                schet = 0
  
                Me.ProgressBar1.Value = (100 * n) / fullenght
            End If
            'дописываем файл
            n = n + 1
            h = h + 1

            If reader2.EndOfStream = True Then Exit Do
            If n > fullenght Then Exit Do
            hj(0) = 0

        Loop


не обращайте внимание на большое количество лишних переменных. они нужны только для статистики.
пытаюсь загрузить бинарный файл с установленного на компе сервера. скорость очень и очень низкая, хотя она должна быть как минимум чуть меньше чем скорость копирования файла с одного места винчестера на другое. а че уж говорить о интернете. будет очень и очень долго загружаться.
повышал буфер для записи в файл до 100 кб скорость увеличилась в двое но всеравно очень низкая.

думаю что проблема на промежутке

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   If schet = 10000 Then
                Application.DoEvents()
                FLOut = New FileStream(topath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)
                FLOut.Seek(n - 9999, SeekOrigin.Current)
                FLOut.Write(hj, 1, 10000)
                FLOut.Close()
                schet = 0
  
                Me.ProgressBar1.Value = (100 * n) / fullenght
            End If



думаю если убрать doevents и пустить все во второй поток скорость увеличиться.

есть ли у кого мыслишки как можно максимально оптимизировать скорость в этом коде?
...
Рейтинг: 0 / 0
Опртимизация скорости при побайтовой закачке из интернета
    #38001530
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой-то жуткий гавнокод. Возьми мой даунлоадер, как-то костылил.

Код: c#
1.
2.
3.
4.
string fileName = "photoshop_kocbyru.pdf";
string url = "http://kocby.ru/ph/photoshop_kocbyru.pdf";
var loader = new Downloader(fileName, url);
loader.Start();



Downloader
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
public class Downloader
{
    public string FileName { get; private set; }
    public string Url { get; private set; }
    public int Buffer { get { return 512; } }

    public Downloader(string fileName, string url)
    {
        FileName = fileName;
        Url = url;
    }

    private WebResponse GetResponse(string method, long start = 0)
    {
        var request = HttpWebRequest.Create(Url) as HttpWebRequest;
        request.Method = method;
        if (start > 0)
        {
            request.AddRange(Convert.ToInt32(start));
        }
        return request.GetResponse();
    }

    private void Read(WebResponse response, Stream stream)
    {
        using (var ns = response.GetResponseStream())
        {
            byte[] nbytes = new byte[Buffer];
            int size = 0;
            size = ns.Read(nbytes, 0, Buffer);
            while (size > 0)
            {
                stream.Write(nbytes, 0, size);
                size = ns.Read(nbytes, 0, Buffer);
            }
        }

    }

    public void Start()
    {
        bool exist = File.Exists(FileName);
        long start = 0;

        using (var stream = exist ? File.OpenWrite(FileName) : new FileStream(FileName, FileMode.Create))
        {
            if (exist)
            {
                start = stream.Length;
                stream.Seek(start, SeekOrigin.Current);
            }

            if (this.Length > start)
            {
                WebResponse response = null;

                try
                {
                    response = GetResponse("GET", start);
                    Read(response, stream);
                }
                finally
                {
                    if (response != null)
                    {
                        response.Close();
                    }
                }
                    
            }
        }
    }

    private long? _length;
    public long Length 
    {
        get
        {
            if (!_length.HasValue)
            {
                WebResponse response = null;

                try
                {
                    response = GetResponse("HEAD");
                    _length = response.ContentLength;

                }
                finally
                {
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }

            return _length.Value;
        }
    }
}

...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Опртимизация скорости при побайтовой закачке из интернета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]