Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для iDarius
1 / 1 / 1
Регистрация: 04.11.2014
Сообщений: 7

Телефонный справочник или оптимизация скорости работы с данными

04.11.2014, 05:31. Показов 1367. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане. Столкнулся с задачей реализации телефонного справочника. Вроде бы все ничего, но по условиям задачи есть несколько ограничений: хранение базы в файле и минимизация времени обработки команд(Загрузка из файла, сохранение в файл, поиск, добавление/удаление/редактирование элемента).

То есть, судя по условиям задачи при запуске программы необходимо все данные подгружать в оперативную память. И тут возникает вопрос, в каком виде хранить данные внутри программы? При этом необходимо учитывать, что данные должны редактироваться, а значит нужен индекс, так как в заданной структуре отсутствуют уникальные поля.

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

Тестирую на 5000000 элементах в каждом из которых по 7 полей типа string. Пока ничего более дельного, кроме List<string[]>(либо object[]) в голову не пришло. Перепробовал множество способов но все либо очень долгое, либо требует очень много оперативной памяти.

Хотелось бы узнать Ваше мнение по этому поводу.
Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2014, 05:31
Ответы с готовыми решениями:

Оптимизация или увеличение скорости работы программы
Доброго времени суток, программисты! Буквально на днях столкнулся с проблемой, связанной с перегрузкой &quot;дельфина&quot; при...

Нужна программа на с или с++ Телефонный справочник
Очень нужна программа &quot; Телефонный справочник&quot; буду очень благодарен, или любые сведения по этой теме... писать тута или в асю 539049 спс...

Телефонный справочник с помощью Access или Excel
Доброе время суток. Помогите с заданием, дело в том что надо создать Оконное Приложение которая будет искать в файле Эксель, или Access...

11
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
04.11.2014, 09:22
Номер телефона, по определению, уникален. Если все записи фиксированного размера, то перезапись удаленных номеров элементарна. Идеальный вариант хранения в этом случае: .DBF с индексом или аналогичная структура. Если размер записей произволен: .DBF + Memo с индексом (или аналогичная структура).

Индекс - либо "key-value DB" (для "больших" данных), либо любой map (словарь) в памяти.

Кликните здесь для просмотра всего текста
Для городского телефонного справочника в системе биллинга (100,000+ номеров: тлф, ФИО, адрес/организация) для индекса использовал B++Tree
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
06.11.2014, 14:58
Может, все-таки необязательно все данные сразу загружать в память?
Если объемы такие большие, по-моему проще будет взять БД (SQLite, например) и с ней работать.
Нужны данные - отправили запрос, данные получили
1
 Аватар для iDarius
1 / 1 / 1
Регистрация: 04.11.2014
Сообщений: 7
06.11.2014, 21:10  [ТС]
Да, Вы безусловно правы, самым разумным было бы использовать SQL, но к сожалению необходим именно файл( Причем надо сделать так, чтобы при загрузке/сохранении/обработке данных пользователь не умер от старости при теж же 5млн элементов)).
Удалось достичь результата: 5млн записей загрузка/сохранение занимает ~5сек. Манипулирование данными ~300млс.

Я так полагаю, что данное время загрузки/сохранения обусловлено физическими характеристиками передачи данных HDD.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:06
Цитата Сообщение от iDarius Посмотреть сообщение
необходим именно файл
iDarius, вы, наверное, не поняли... Не SQL, а именно SQLite. Для него не надо ничего развертывать на машине пользователя. Только приложение + файл с базой данных. Подумайте над
этим, это лучший вариант, ятд.
2
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
06.11.2014, 22:15
Цитата Сообщение от insite2012 Посмотреть сообщение
приложение + файл с базой данных
+ DLL-ка (~400 Kb от SQLite). Поддерживаю - лучший вариант.
2
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:24
Цитата Сообщение от gazlan Посмотреть сообщение
+ DLL-ка (~400 Kb от SQLite).
И ее так же можно в исполняемый файл (если есть такое желание) заинжектить)))
1
 Аватар для iDarius
1 / 1 / 1
Регистрация: 04.11.2014
Сообщений: 7
06.11.2014, 22:32  [ТС]
Это я все прекрасно понимаю, но был поставлен запрет на дополнительные компоненты, не входящие в поставку MS .NET Framework 3.5. Без данного ограничения у меня не было бы причины создавать эту тему, я бы сразу прикрутил SQLCe либо SQLite, но мои представления о развертывании локальной БД с помощью стандартных компонентов .NET Framework достаточно скудны. Если бы вы могли подсказать в какую сторону копать, я был бы очень благодарен))
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:34
Цитата Сообщение от iDarius Посмотреть сообщение
представления о развертывании локальной БД с помощью стандартных компонентов .NET Framework достаточно скудны
То есть, dll от SQLite использовать нельзя, я верно понял? А если взять самое простое - БД от Access? Там никакие либы вообще не нужны. Все есть в .NET. Как вариант?
1
 Аватар для iDarius
1 / 1 / 1
Регистрация: 04.11.2014
Сообщений: 7
06.11.2014, 22:41  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
То есть, dll от SQLite использовать нельзя, я верно понял?
К сожалению это так.
Цитата Сообщение от insite2012 Посмотреть сообщение
А если взять самое простое - БД от Access
На эту тему я пока не разбирался, но первое что пришло в голову это при необходимости работы с *.doc/*.docx файлами поднимался процесс "MSWORD", и на компьютерах, где отсутствовал установленный MSOffice программа крашилась. Основываясь на этом, не затребует ли работа с MS Access предустановленного Office'a?(К сожалению возможности проверить нет)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:48
Цитата Сообщение от iDarius Посмотреть сообщение
не затребует ли работа с MS Access предустановленного Office'a?
Нет, ничего она не затребует. Все работает стандартными средствами .NET. Только исполняемый файл и база (ну и .NET Framework, естественно ).
1
 Аватар для iDarius
1 / 1 / 1
Регистрация: 04.11.2014
Сообщений: 7
06.11.2014, 22:55  [ТС]
insite2012, это очень хорошо) Я более подробно изучу данную возможность. Спасибо за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2014, 22:55
Помогаю со студенческими работами здесь

Телефонный справочник - в чём хранить записи? В БД или в файле?
Хочу написать телефонный справочник организаций города, приблизительно на 30 тысяч номеров. Прошу вашего совета, уважаемые программисты,...

Оптимизация скорости работы с БД (ADO, DataEnvironment)
Привет! Заканчиваю работу над приложением - интерфейсом БД. Использую MySQL через ADODB, DataEnvironment (один connection),...

Нужен совет: оптимизация кода, увеличение скорости работы скрипта
Всем привет. Имеется код выводящий из массива названия регионов РФ с указанием буквы. Получается что-то вроде такого: А ...

Замер скорости выполнения программы или оптимизация проекта
Всем привет, не знаете как лучше замерить скорость программы ?, чтобы можно было сравнить в какой среде (delphi с многопоточностью или c++...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru