Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502

Магическое число 93368853 в виртуальном CListCtrl

14.12.2020, 21:53. Показов 2055. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет ребята.
Вот на досуге решил попробовать выжать максимум из CListCtrl с флагом LVS_OWNERDATA.
Ранее мне попадались сведения что он не поддерживает более чем 100 000 000 итемов.
В MSDN сказано, что после установки данного стиля, число элементов, которые сможет хранить список, будет ограничено максимальным значением DWORD (для обычных списков только int). Однако, все функции (в том числе и API) для работы со списком принимают int. Кроме этого, мне не удалось использовать более 100.000.000 элементов. Более того, в примере MSJ за ноябрь 1996 г. от Strohm Armstrong встречается именно эта магическая цифра. Отговорка, стандартна: "Сложно представить, что возникнет необходимость использовать больше". Нет вопросов, если бы использовалась хотя бы степень двойки, а так, IMHO, ограничение такой странной (круглой) цифрой выглядит коварным замыслом.
Ну да в 1996 году возможно сложно было представить, и я думал а сколько лет прошло, ерунда это.
В итоге 100 000 000 это и правда предел, далее просто количество итемов обнуляется,
но самое интересное что после количества 93 368 853 он начинает ужасно глючить,
сбрасывать скроллинг, и потом обнулить его невозможно, только выход из программы.
И что это за число? Телефон бабушки этого Strohm Armstrong,а? почтовый индекс?
Я порылся в гугле и ничего не нашел.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2020, 21:53
Ответы с готовыми решениями:

Магическое число
Ребят, почему постоянно пишется, что моё число меньше магического? Но если убрать "srand(time(NULL));", то работает правильно, но...

Магическое число
Я создаю текстовую игру на Python. Цель такова: Компьютер загадывает число от 1 до 100, и игрок должен угадать число. Если игрок...

Магическое число 1
Что-то вот есть в этих 1. Не знаю даже как описать. Так приятно когда видишь, что 1см тебя ждет или 1 сообщение или уведомление пришло... ...

36
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 19:35  [ТС]
Студворк — интернет-сервис помощи студентам
Не помню точно, но как то, "всегда будьте готовы предоставить данные без кеширования".
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 19:36
Цитата Сообщение от zombivadim Посмотреть сообщение
По документации оно отправляется не всегда. И запроса может вообще не быть не каширование.
Что значит "не всегда"? Оно отправляется когда нужны новые данные. Этого вроде достаточно

Добавлено через 39 секунд
Цитата Сообщение от zombivadim Посмотреть сообщение
Не помню точно, но как то, "всегда будьте готовы предоставить данные без кеширования".
Ну да. Но лучше предоставь с кэшированием.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 19:40  [ТС]
oleg-m1973, Посмотрите пожалуйста, а что может быть причиной глюков с количеством колонок?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 19:53
Цитата Сообщение от zombivadim Посмотреть сообщение
oleg-m1973, Посмотрите пожалуйста, а что может быть причиной глюков с количеством колонок?
Ну а что смотреть? Причина в том что ты на каждую строку делаешь Unmap/MapViewOfFile. Сделай простое консольное приложение и замерь время на большом файле. Так, для общего развития.

Добавлено через 57 секунд
А с количеством колонок, что-то не вижу глюков
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:01  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
каждую строку делаешь Unmap/MapViewOfFile
MapViewOfFile очень быстрая функция, она отрабатывает мгновенно.
Можно просто смапировать файл целиком (небольшой), и давать данные оттуда результат будет одинаковый.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 20:08
Цитата Сообщение от zombivadim Посмотреть сообщение
MapViewOfFile очень быстрая функция, она отрабатывает мгновенно.
Нет, не мгновенно. Ей надо начитать соответствующий кусок файла, а это очень медленно.

Добавлено через 3 минуты
Цитата Сообщение от zombivadim Посмотреть сообщение
Можно просто смапировать файл целиком (небольшой), и давать данные оттуда результат будет одинаковый.
Подозреваю, ты и это плохо делаешь
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:13  [ТС]
oleg-m1973, Хорошо. MapViewOfFile целиком файла - 500мб и файла - пару килобайт
отрабатывают одинаковое количество времени. Нет тормозов в большом файле.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 20:15
Цитата Сообщение от zombivadim Посмотреть сообщение
oleg-m1973, Хорошо. MapViewOfFile целиком файла - 500мб и файла - пару килобайт
отрабатывают одинаковое количество времени. Нет тормозов в большом файле.
Как ты это замерял?
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:22  [ТС]
oleg-m1973,
GetTickCount() 0, в обоих случаях, сами проверьте.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 20:24
Цитата Сообщение от zombivadim Посмотреть сообщение
GetTickCount() 0, в обоих случаях, сами проверьте.
Т.е. делал маппинг, пробегался по всему массиву, потом Unmap, и повторял это много раз?
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:30  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
делал маппинг,
Зачем пробегаться по массиву, время затраченное этой функцией (MapViewOfFile) на выполнение,
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 20:38
Цитата Сообщение от zombivadim Посмотреть сообщение
Зачем пробегаться по массиву, время затраченное этой функцией (MapViewOfFile) на выполнение,
У тебя цель вроде не вызвать MapViewOfFile, а считать данные. Ты, смотрю, по книжкам о Гарри Поттере учился, вместо нормальных учебников, если думаешь, что файл можно начитать мгновенно, помахав палочкой.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:49  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
на каждую строку делаешь Unmap/MapViewOfFile
Я сделал вызов функции, потом читаю данные которые она предоставила, как я эти данные обрабатываю,
быстро или медленно, это уже другая история, вопрос сколько времени тратится сделать проекцию, и закрыть ее.

Добавлено через 35 секунд
Или я чего то не понимаю, в работе этой функции.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 20:50
Цитата Сообщение от zombivadim Посмотреть сообщение
Я сделал вызов функции, потом читаю данные которые она предоставила, как я эти данные обрабатываю,
быстро или медленно, это уже другая история, вопрос сколько времени тратится сделать проекцию, и закрыть ее.
На всё вместе у тебя тратится дохренища времени. Но, дело твоё, можешь в это верить, можешь не верить, мне по-барабану.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 20:56  [ТС]
oleg-m1973, Да нет я вам верю, у вас опыта явно больше,
просто при кешировании мне так же придется открывать и закрывать проекцию.
Или каким то образом контролировать, вышел ли запрос за пределы смапированного блока.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.12.2020, 21:06
Цитата Сообщение от zombivadim Посмотреть сообщение
Или каким то образом контролировать, вышел ли запрос за пределы смапированного блока.
Таким образом и контролируй - запоминай границы области, которую ты закэшировал по LVN_ODCACHEHINT. Если вдруг вышел за них в LVN_GETDISPINFO, то тогда делай MapViewOfFile.
И по LVN_ODCACHEHINT тоже смотри, чтоб лишних действий не делать.

Добавлено через 4 минуты
Вообще, эта ситуация вроде у Рихтера была описана - https://www.ozon.ru/context/detail/id/116668/
Ты её читал?
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
15.12.2020, 22:51  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
запоминай границы области, которую ты закэшировал
Это очередная глобальная переменная в классе?

Добавлено через 1 час 43 минуты
Вообщем убрал я совсем Get_projection, Необходимый блок проекции вычисляю в двух местах
в LVN_ODCACHEHINT и LVN_GETDISPINFO если они не совпадают, переоткрываю проекцию в блоке (LVN_ODCACHEHINT)
Не знаю насколько улучшилось, как бы правильно измерить...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2020, 22:51

Магическое число 10
Есть десяток ресурсов одной и той же тематики. Ресурсы разные практически во всем - некоторые на самописном движке, некоторые статичный...

Магическое число 0х53
При попытке прошить МК мега32А выдает сообщение об ошибке http://i9.pixs.ru/storage/4/5/6/Oshibka0h5_1209972_15284456.jpg Читаю...

Магическое число и ф-ция goto
Помогите усовершенствовать программку ,пожалуйста) После того как угадал число --- Возвращать в начало к выбору 3-х вариантов.Думал...

Std::bad_alloc магическое число
Читаю байты из файла вылетает ошибка:Unhandled exception at 0x75A6C41F in Fourie With File.exe: Microsoft C++ exception:...

STM32F407VG Basic Timer 6 Магическое число
Здравствуйте, с помощью таймера 6 делаю простейшую задержку, в которой есть небольшая погрешность (~0.4 µs), но это на данном этапе не...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru