Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 03:44   #1
ArtUrlWWW
 
Регистрация: 25.08.2008
Сообщений: 9
По умолчанию Преобразование типов - большая нагрузка на ЦП

Здравствуйте. Пишу downloader, так сказать, менеджер закачки. Вычисляю
Код:
 while ((int)(readCount = DownloadStream.Read(buffer, 0, blockSize)) > 0)
                {                    
                    tempsize += readCount;
                    stream.Write(buffer, 0, readCount);
                    iProgressPercentage = (int)(((double)tempsize / iSize) * 100);
                    
                   if (iProgressPercentage > oldprogres)
                    {
                    backgroundWorker1.ReportProgress(iProgressPercentage);
                    }
                    oldprogres = iProgressPercentage;
                    
                }
Где
Код:
int iProgressPercentage = 0;
Int32 tempsize = 0;
double iSize = downs.getrequestlength(url);
Проц висит на строке iProgressPercentage = (int)(((double)tempsize / iSize) * 100);

И ещё - почему даже вызов "пустой", т.е. ничего не выполняющей
backgroundWorker1.ReportProgress(iP rogressPercentage);
довольно ощутимо грузит проц?

Да и сама функция прогресса не шибко вумная
Код:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            // Ищем соответствующую запись в listview
            
            razmerlistview = Form1.listView1.Items.Count;
            for (int x = 0; x < razmerlistview; x++)
            {                 
                forchecktag=Convert.ToString(Form1.listView1.Items[x].Tag);
                if (forchecktag == localtag)
                {

                    if (e.ProgressPercentage <2)
                    {
                        switch (workprog)
                        {
                            case 1:
                                Form1.listView1.Items[x].SubItems[3].Text = "Запрашиваю файл...";
                                break;
                            case 2:
                                Form1.listView1.Items[x].SubItems[3].Text = "Получаю данные о файле...";
                                break;
                            case 3:
                                Form1.listView1.Items[x].SubItems[3].Text = "Скачиваю: " + Convert.ToString(e.ProgressPercentage) + " %";
                                break;
                        }
                    }
                    else
                    {
                        Form1.listView1.Items[x].SubItems[3].Text = "Скачиваю: " + Convert.ToString(e.ProgressPercentage) + " %";
                    }
                }
            }
              
            
        }
Вобщем, конкретизирую вопрос - чем можно заменить
iProgressPercentage = (int)(((double)tempsize / iSize) * 100);
и
backgroundWorker1.ReportProgress(iP rogressPercentage);
для того, чотбы программа меньше грузила проц?
ArtUrlWWW вне форума Ответить с цитированием
Старый 19.05.2009, 14:41   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Посмотри Profiler'ом что у тебя проц грузит, наврядли это преобразование типов.
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си. Преобразование типов pif Помощь студентам 3 20.04.2009 13:54
Преобразование типов DeFace Общие вопросы C/C++ 4 24.03.2009 17:06
преобразование типов в Си HoOpe Помощь студентам 5 11.03.2009 21:58
Преобразование типов MAKEDON Общие вопросы C/C++ 3 02.03.2009 18:27
Преобразование типов Pronik Общие вопросы Delphi 2 12.06.2007 12:23