Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорая обработка данных 
:(
    Опции темы
gordmiand
Дата 21.6.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



я считываю данные (около 40 тыс. чисел) из файла, сортирую их и строю некий график...подскажите как можно все эти операции по возможности убыстрить (а то комп "загружается" секунд на 15 при том, что это не максимальное число загружаемых данных)?

Это сообщение отредактировал(а) gordmiand - 21.6.2009, 22:56
PM MAIL   Вверх
Данкинг
Дата 21.6.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Из какого файла - просто текстового, что ли?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
gordmiand
Дата 22.6.2009, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



из бинарного файла гружу такое кол-во данных, потом в проге их сортирую и строю по данным график...
PM MAIL   Вверх
dumb
Дата 22.6.2009, 06:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(gordmiand @  21.6.2009,  23:54 Найти цитируемый пост)
как можно все эти операции по возможности убыстрить
закомментируй 17-ую строку - в ней ошибка, из-за этого все тормоза.


M
dumb
если в следующем посте не будет кода, тема будет удалена

PM MAIL   Вверх
gordmiand
Дата 22.6.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



а что это за 17-ая строка?
PM MAIL   Вверх
Данкинг
Дата 22.6.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(gordmiand @ 22.6.2009,  22:03)
а что это за 17-ая строка?

Там в ней ошибка у тебя. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 23.6.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

а что это за 17-ая строка? 

dumb, слишком витиевато ты сказал  smile 
gordmiand не догнал  smile 
а я поржал  smile 


--------------------

PM MAIL   Вверх
unicuum
  Дата 23.6.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: нет
Всего: 8



Цитата(Dmi3ev @  23.6.2009,  01:34 Найти цитируемый пост)
gordmiand не догнал  smile 
а я поржал  smile  

Это намёк на телепатический канал связи межу gordmiand и dumb. По нему dumb скачал исполняемый код, который написал gordmiand и нашёл в нём ошибку, о которой и сообщил.


--------------------
user posted image
обычный день на винграде
PM   Вверх
gordmiand
Дата 23.6.2009, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



ну серьезно - что это за 17-ая строка и как ее удалить? или народ просто решил прикольнуться...
PM MAIL   Вверх
W4FhLF
Дата 23.6.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



gordmiand, над тобой прикалываются потому, что ты не привёл никакого кода и при этом хочешь получить помощи. Откуда мы знаем, что ты там понаписал и почему у тебя это медленно работает? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
mrbrooks
Дата 23.6.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(unicuum @  23.6.2009,  02:02 Найти цитируемый пост)
Это намёк на телепатический канал связи межу gordmiand и dumb. По нему dumb скачал исполняемый код, который написал gordmiand и нашёл в нём ошибку, о которой и сообщил. 


Межпроцессное взаимодействие на лицо.
PM MAIL   Вверх
gordmiand
Дата 23.6.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



ха-ха-ха ....ну очень смешно....

попробую написать код (общую его структуру):
Код

FILE *potdan;
potdan=fopen(“c:\\f1.reg”,"rb");

   fseek(potdan,100, SEEK_SET);        

    while(…)                    
{

       fseek(potdan,10, SEEK_CUR);      

   for (int i=1; i<=4; i++)
   {
       dan_kadr[i]=0;
       fscanf(potdan,"%c",&dan_kadr[i]);      
    }
………….
…………..
    fseek(20, SEEK_CUR);      


 while (…)     
{
    fscanf(potdan,"%c",&dan_pak[1]);
………
………
……....   
   for (int i=1; i<=7; i++)
      fscanf(potdan,"%c",&dan_pak[i+1]);
…..                           
 
fseek(potdan,8, SEEK_CUR);                
 }

}  
fclose(potdan);
 + в данной функции вызывается еще несколько других (определение размера файла и перевода чисел из различных систем счисления)

сортируются эти скачанные из файла данные методом пузырька (через "временный" буфер)+ несложные графические построения (но в основном долго грузятся данные из файла)


PM MAIL   Вверх
W4FhLF
Дата 24.6.2009, 05:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Надо минизировать количество обращений к HDD.  Загрузи данные целиком в память, потом уже делай парсинг.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
gordmiand
Дата 24.6.2009, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



то есть данные из файла считывать не частями, а загрузить все сразу в массив и уже его обрабатывать? 
PM MAIL   Вверх
W4FhLF
Дата 24.6.2009, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Да. Ну по-крайней мере если там 40 тыс. значений, то что это, 100 кб памяти? Это мелочи. Поэтому зачем тысячу раз обращаться к медленному винту, если можно сразу всё загрузить в память и в памяти обработать?

Добавлено через 1 минуту и 26 секунд
А если файлы огромные(по несколько сотен мегабайт) и размещать их в памяти проблематично, то можно завести буфер и читать туда файл кусками. Короче задача минимизировать количество обращений к HDD.

Добавлено через 7 минут и 8 секунд
И bubble sort это хреновый алгоритм smile Бери алгоритм с логарифмической сложностью.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Lazin
Дата 24.6.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Цитата(W4FhLF @  24.6.2009,  06:16 Найти цитируемый пост)
А если файлы огромные(по несколько сотен мегабайт) и размещать их в памяти проблематично, то можно завести буфер и читать туда файл кусками. Короче задача минимизировать количество обращений к HDD.

можно использовать обычный std::ifstream, он буферизует чтение
PM MAIL Skype GTalk   Вверх
W4FhLF
Дата 24.6.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



У автора исходник на Си.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 24.6.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Данные нужно грузить целиком, ну или хотя бы подряд. Многочисленные fseek в коде очищают буфер чтения файла, следующий fscanf закачивает буфер (что гораздо больше, чем ему удасться прочесть до следующего fseek)
В результате всякая буферизация отсуствует, а файл читается С библиотекой МНОГОКРАТНО.

PM MAIL   Вверх
gordmiand
Дата 25.6.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



подскажите пож-та как конкретно загружать файл блоками (какими именно) и главное как потом работать с данным массивом посимвольно...

я делал так:
Код

FILE *potdan;
char mas[100000][17];
potdan=fopen("c:\\f1.reg","rb");
fseek(potdan,512, SEEK_SET);
for (int i=1; i<=100000 (??? не знаю № конечной строки файла); i++)
 for (int j=1; j<=16; j++)
   fscanf(potdan,"%c",&mas[i][j]); 
fclose(potdan);

большой разницы с пред. вариантом (с fseek-ами) по скорости нет...
PM MAIL   Вверх
xvr
Дата 25.6.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Про fscanf забудьте (и про все семейство scanf)
Читать надо с помощью fread, обрабатывать строковыми функциями (str* и/или mem*)

PM MAIL   Вверх
gordmiand
Дата 26.6.2009, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



хотелось бы конкретный пример, позволяющий в дальнейшем оперировать с каждым символов файла...
PM MAIL   Вверх
gordmiand
Дата 26.6.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Код

int I=0;
FILE *p;
char mas[150000][16];

p=fopen(“c:\1.reg”,"rb");
fseek(p,512, SEEK_SET); 

// fread(mas, 1, 40000, p); // вариант 1

while(!(feof(p))) // вариант 2
{
I++;
for (int J=1; J<=16; J++)
fscanf(potdan,"%c",&mas[I][J]);
}


fclose(p);

for (int i=0; i<40000; i++)                                        //8
s1->Cells[0][i]=IntToHex((int)(unsigned char)mas[i][9] ,2);


почему при варианте №2 9-ый столбец считанных из файла данных получается верным, а при варианте №1 тот же столбец (но под №8, так как данные записываются с [0][0] …– а как сделать запись с использованием fread, начиная с произвольного № элемента массива (mas)???) записывается неверно…. Мне надо скачать из бинарного файла и записать в массив 40000(например) строк по 16 байт (символов) в каждой строке…










Это сообщение отредактировал(а) gordmiand - 26.6.2009, 19:11
PM MAIL   Вверх
xvr
Дата 27.6.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(gordmiand @ 26.6.2009,  19:11)
почему при варианте №2 9-ый столбец считанных из файла данных получается верным, а при варианте №1 тот же столбец (но под №8, так как данные записываются с [0][0]

Потому что в С (и в С++) массивы индексируются с 0. Вариант 2 у вас в принципе неправильный - происходит переполнение по 2му индексу массива (индекса 16 быть не может - максимум 15)
Цитата

 …– а как сделать запись с использованием fread, начиная с произвольного № элемента массива (mas)???) записывается неверно….

Код

fread(&mas[10], 1, 40000, p); 

Цитата

 Мне надо скачать из бинарного файла и записать в массив 40000(например) строк по 16 байт (символов) в каждой строке…
У вас это и написано, но к массиву надо потом правильно обращаться (это не Pascal!)

PM MAIL   Вверх
gordmiand
Дата 1.7.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



понятно...а что значит "к массиву надо потом правильно обращаться (это не Pascal!)"?
чем мой вывод значений массива из примера выше неверен?
PM MAIL   Вверх
xvr
Дата 1.7.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(gordmiand @ 1.7.2009,  15:54)
понятно...а что значит "к массиву надо потом правильно обращаться (это не Pascal!)"?

Индексы начинаются с 0, в Pascal с 1 (по умолчанию)
Цитата

чем мой вывод значений массива из примера выше неверен?
Вывод верен, а ввод - нет

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1458 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.