Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.130.31] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Итак. Кто читал мои прошлые темы, с базами данных не получилось - медленно ведется поиск.
Выход - работать через файлы. C файлов читаются строки формата имя*фамилия*допинфо имя*фамилия*допинфо ... имя*фамилия*допинфо Они пихаются в класс class man { public String name; public String sname; ... public String dopinfo; } Создается ArrayList mans В котором происходит поиск String s="вася"; foreach (man i in mans) { if (i.dopinfo.indexof(s)>-1) Console.Writeline(i.dopinfo); } Файлы с этими данными большие - в сумме около 3 Мб. Для кпк ноша большая. Если читать инфу из файлов в КПК при запуске, этот процесс займет 15-20 секунд. Читаю как бинарник. Вопрос - как можно загрузить данные (можно в фоне) чтобы это не сильно отразилось на работе КПК? И побыстрее загрузить ) |
Сообщ.
#2
,
|
|
|
а у тебя есть чем занять юзера, пока жаные грузятся?
|
Сообщ.
#3
,
|
|
|
У меня программа с векторной картой. Т.е. 4-5 секунд она грузится, потом по ней можно перемещаться. ПРичем, перемещение тоже процессор кушает. ПРедполагается, юзер сперва перемещаться будет по карте. Потом уже в базу полезет
|
Сообщ.
#4
,
|
|
|
А тебе обязательно надо всё загружать или юзеру вероятнее всего понадобится один-два человека из эти 3х метров данных?
|
Сообщ.
#5
,
|
|
|
Будет вестись поиск. ПОиск должен проходить естественно по всем человекам.
Может, если в ресурсах искать будет быстро? |
Сообщ.
#6
,
|
|
|
Можно попробывать ничего не грузить, а для ускорения поиска использовать индекс
Тоесть сделать заранее ещё один файлик в котором будут храниться смещения в файле данных для каждой персоны. Найти персону в индексе быстро, так как они там упорядочены и там только информация, которя может считаться ключевой (уникальна для каждой персоны). Найдя в индексе персону - читаем данные уже в файле даных по известному смещению. Тобишь своя простенькая СУБД получится. Добавлено хотя, если ключевая инфориация не будет хотя бы раз в 10 меньше всей информации - дело не выгорит, так как искать в индексе будет почти так же долго... Добавлено Да, канечно можно грузить файл в фоне (с заданной скоростью, чтоб не тормазило). Но ведь если ты работаешь на КПК - три метра оперативы - тоже трагично. Сделать саму загрузку не сложно, но потом ведь выплывут всякие там ситуаци "не готовых данных"... |
Сообщ.
#7
,
|
|
|
Вот как ее сделать? =) Если что с памятью проблем нет
|
Сообщ.
#8
,
|
|
|
создаёшь буфер какого надо размера.
читаешь туда информацию кусками. а из буфера - уже куда надо копируешь. То что успело загрузиться уже можно использовать. Как сделать так чтоб загрузка не мешала работе? тут 2 варианта - 1. грузитьт будет нитка с низким приоритетом (приоритеты нитей будут работать на кпк?) 2. сделать буфер маленьким и грузить туда инфу по таймеру тоже нить, но без приоритетов Второй вопрос - как использовать даные. тут тоже варианты: 1. грузим ВСЁ в память и потом разбираем всякими циклами. 2. продумать получше нить (и класс, её инкапсулирующий) загрузки - пусть генерит событие каждый раз, когда загружена целая запись из файла. |
Сообщ.
#9
,
|
|
|
Смотри. Я могу позволить себе сделать такую вещь - в программе загрузить stream файла в память. И потом его парсить. Как показала практика - парсинг занимает большую часть времени. Можно ссылку или пример как форкнуть поток и в нем читать имеющийся stream?
|
Сообщ.
#10
,
|
|
|
Форкать поток не надо. Надо написать функцию, которая выполнает загрузку. Потом создать нить и приказать ей выполнять эту функцию.
Или CompactFramework не поддерживает нитей??? |
Сообщ.
#11
,
|
|
|
Покажи как нить создать. ПРоверю.
|
Сообщ.
#12
,
|
|
|
Внесу свои 5 копеек.
мне кажется что лучшее что тут нужно сделать это индексный файл. для этого он и задумывался собственно - для оптимизации поиска. http://www.codenet.ru/webmast/search/newbee/ |
Сообщ.
#13
,
|
|
|
Цитата Mr_Smith @ мне кажется что лучшее что тут нужно сделать это индексный файл. согласен, но Цитата Slukad @ C файлов читаются строки формата имя*фамилия*допинфо тоесть что будет индексом? имя-фамилия? тогда индекс записи будет всего то в 2 (в лучшем случае!) раза меньше одной записи. Толку то мало тогда. Хотя, Slukad-у видне, какие у него там данные. |
Сообщ.
#14
,
|
|
|
Цитата Slukad @ Файлы с этими данными большие - в сумме около 3 Мб. Для кпк ноша большая. Если читать инфу из файлов в КПК при запуске, этот процесс займет 15-20 секунд. Читаю как бинарник. Вопрос - как можно загрузить данные (можно в фоне) чтобы это не сильно отразилось на работе КПК? И побыстрее загрузить ) Может, воспользоваться СУБД? На windows ce вполне запускаются sqlite и sql server compact. |
Сообщ.
#15
,
|
|
|
Цитата Slukad @ Покажи как нить создать. ПРоверю. void myFunc(){ // здесь пищнм действия, которые должна выполнить нить ... // как только выполнение дойдёт до сюда - нить завершится } void Main() { System.Threading.Thread t = new System.Threading.Thread(myFunc); t.Priority = System.Threading.ThreadPriority.Lowest; t.IsBackground = true; t.Start(); } Если ты не умеешь создавать нить - то, скорее всего не знаешь проблем, связанных с многопоточным программированием. Лучше поднять маленько теорию, прежде чем браться. Хотябы усяни для себя что такое синхронизация и чем её едят. А про СУБД - подумай. |