![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]()
Здравствуйте, есть необходимость разработать аналитическую систему которая работает с большим количеством данных.
Большая часть системы разработана и теперь встает вопрос оптимизации скорости. И вот что получается: Стандартный контейнер List<> не устраивает потому что метод ToArray работает очень долго. Написал свой контейнер упрощенный - получил другую проблему. Заполнение контейнера очень долгое. Подскажите пожалуйста как сделать свой класс-контейнер чтобы добиться максимум производительности? Мой класс: Код:
Результаты тестирования в прикрепленном изображении. Хочется чтобы коллекция обладала скоростью добавления как у List а выборкой массива как у меня
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
![]() |
![]() |
![]() |
#2 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
![]()
Как по-моему, производительность вашего Add упирается в Array.Copy - нехорошо. Попробуйте копировать вручную, а не существующими методами.
P.S. Могу ошибаться - пробуйте. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]()
Все перепробовал .. и Marshal и for() - Array.Copy это самое быстрое
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]() Цитата:
----------- Еще как вариант - не увеличивать количество элементов массива каждый раз при добавлении, а удваивать размер массива при недостатке места. Такая идея заложена, например, в StringBuilder Код:
Благодарить в репутацию. Проклинать — туда же
![]() Последний раз редактировалось Luuzuk; 06.09.2013 в 14:08. |
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]()
Вот результат с вашим примером ....
Как то странно время показывается ... Если первый проход то время побольше ... второй проход поменьше ... ну в целом вот такой вот результат получился: Потокобезопасность не очень нужна поскольку к данному массиву не будет доступа из других потоков. Все равно штатный выигрывает почему то .. ![]()
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 06.09.2013 в 14:48. |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]() Цитата:
Благодарить в репутацию. Проклинать — туда же
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]() Цитата:
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
Вернуть новый массив, обрезанный по значению поля _count с помощью того же самого Buffer.BlockCopy. И окончательно добить этим производительность
![]()
Благодарить в репутацию. Проклинать — туда же
![]() |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
![]() Цитата:
![]() Неужели нету способа максимально быстро скопировать данные? Пусть даже из List но в массив.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
Чем массив отличается от списка? Тем, что массив занимает один большой непрерывный кусок в памяти (список может быть разбросан по оперативке как угодно). Этим и объясняются сложности в переходе от списка к массиву. Отсюда и задержки. Если для вас это настолько критично - напишите хранилище этих данных на с/с++ и работайте с неуправляемым кодом
![]()
Благодарить в репутацию. Проклинать — туда же
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна оптимизация кода | casusbeli | Общие вопросы C/C++ | 5 | 11.03.2011 22:42 |
оптимизация | Terrance! | Помощь студентам | 8 | 24.09.2010 10:58 |
Очень нужна оптимизация процесса | kinogruppa | Microsoft Office Excel | 19 | 06.09.2009 15:43 |
Нужна оптимизация дельфинского кода | JTG | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 29.05.2008 14:53 |