|
|
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
Как можно открывать файлы по другому, чтоб ускорить чтение? Так как строк в файле много и обработка идет долго. Мне посоветовали написать на чистом "С" не используя библиотек, то можно ускорить процесс. Если не трудно приведите пример для моего кода. Сейчас реализовал все так: char str[200]; pcfile - полный путь к файлу ifstream in(pcfile.c_str()); for(Count = 0; !in.eof(); Count++) { in.getline(str, 199); if(str[0] == '=' || strlen(str) < 3) break; k_1 = GetDouble(str, 67, 6); k_2 = GetDouble(str, 73, 6); k_3 = GetDouble(str, 79, 6) k_n = GetDouble(str, 80, 6) //запись в БД T_f->Insert(); T_f->FieldValues["NAM"] = k1; T_f->FieldValues["NAM2"] = kn; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 11:44 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
А сервер какой используешь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 12:04 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
Мне посоветовали написать на чистом "С" не используя библиотек, то можно ускорить процесс. Вот они пусть и пишут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 12:10 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
Я например частенько для разборки текстовых файлов пользуюсь FLEX (иногда в комбинации с BISON). Хотя, конечно это простым методом не назовеш :), но зато можно сделать очень эффективный и быстрый разбор файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 12:54 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
Еще маленький совет :) Закоментируй код который обращается к базе данных, т.е. считывай данные из файла, но в базу не запихивай. И тогда ты сразу поймеш, надо ли тебе заниматься "ускорением чтения из файла". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 13:07 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
SAnatoliy писал:Как можно открывать файлы по другому, чтоб ускорить чтение? Можно читать из файла блоками, а не по одной строке. и чем больше блок тем быстрее читает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 13:30 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
а какая информация в файле? может подумать о простейшем лексическом анализаторе? Который сразу тебе числа выдаст. И не надо будет читать ни в какой буфер. Да, можно отказаться от STL-потоков, если стоит задачи экономить микросекунды, а так - они неплохи, и с буферированием у них порядок. T_f->Insert(); T_f->FieldValues["NAM"] = k1; T_f->FieldValues["NAM2"] = kn; обращение к полям по имени вообще "сожрет" все твое быстродействие. по-другому никак? накапливай данные в буфер, а потом скидывай их за один раз в базу, незачем это делать построчно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2003, 18:43 |
|
||
|
Помогите советом или примерчиком на С, для (+)
|
|||
|---|---|---|---|
|
#18+
Согласен на 100%, что основные тормоза от построчной вставки в бд, лучше использовать BulkInsert, а если хочется "накалывать блох", то нужно хотя бы убрать strlen из цикла - это же вложенный цикл получается. Число прочитанных символов и так должно быть известно потоку - ф-ия gcount, кажется возвращает это число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2003, 14:27 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32326257&tid=2035776]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 369ms |

| 0 / 0 |
