Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Есть у меня закешированный список. В какой-то момент мне этот список нужно обновить реальными значениями и каждому элементу списка присвоить статус: Если элемент был в кеше и остался - wnNothing Если элемент был в кеше и пропал - wnUnregister Если элемент появился в кеше - wnRegister Идея была следующая: всем существующим элементам в кеше присваиваем wnUnregister далее идем по реальному списку и смотрим состояние кеша. Если элемент есть в кеше, то меняем его состояние на wnNothing, в противном случае, добавляем его со статусом wnRegister Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. в этом коде меня смущает постоянный поиск элемента по вычисляемому хешу. Никак нельзя его оптимизировать? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 15:41 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Оно и так О(1), можно разве что не делать это дважды. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 15:46 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov можно разве что не делать это дважды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 15:57 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Вместо ContainsKey использовать что-то, что сразу возвращает указатель на TWriterNotify в случае успеха. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 16:00 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Вместо ContainsKey использовать что-то, что сразу возвращает указатель на TWriterNotify в случае успеха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 16:16 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, _Vasilisk_, Вызывать TryAdd , если выдало false - то уже присвоение wnNothing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 16:43 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Ну это было бы просто. Но стандартный TDictionary так не умеет Не верю. Загляни ему в исподники ContainsKey(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 17:12 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
swame2 Вызывать TryAdd Тынц Write MethodIndex type Value type If duplicate keyAddTKeyTValueExceptionAddOrSetValueTKeyTValueOverwriteItemsTKeyTValueOverwrite Read MethodIndex/input type Result typeIf key not foundNotesContainsKeyTKeyBooleanfalseTrue = foundContainsValueTValueBooleann/aTrue = foundExtractPairTKeyTPairDefault pairReturns TPair, removes item from dictionaryItemsTKeyTValueExceptionUse TryGetValue to avoid exceptionoperator []TKeyTValueExceptionC++ onlyKeysn/aTKeyCollectionn/aToArrayn/aTArray<TPair<TKey,TValue>>n/aTryGetValueTKeyTValue, Booleandefault, falseReturns TValueValuesn/aTValueCollectionn/a Dimitry Sibiryakov Не верю. Загляни ему в исподники ContainsKey(). Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 17:58 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_TryGetValue TKey TValue, Boolean default, false Returns TValue Вот оно. Ты получаешь или указатель на значение или флаг, что его нет, за одну операцию. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 18:04 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ты получаешь или указатель на значение Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 18:07 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ в этом коде меня смущает постоянный поиск элемента по вычисляемому хешу. Никак нельзя его оптимизировать? _Vasilisk_, я в этих новых дельфях не разбираюсь, но вот в C++ есть контейнер "двухвостая "очередь", std::deque<>. Так вот, у нее, кроме мгновенной вставки/удаления в оба хвоста, также реализованная сложность доступа про индексу == O(1), т.е. как у массива/вектора. Может, и в новых дельфях такое есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 18:35 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Я получаю само значение по ссылке Да пофиг, в Дельфи это и есть указатель. Оно-то тебе и надо чтобы установить в него wnNothing. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 18:45 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Да пофиг, в Дельфи это и есть указатель. ъъъъъ также реализованная сложность доступа про индексу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 19:11 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. 2. Это странный код. Проход по списку ключей, и в каждой итерации - снова доступ к элементу по ключу. Нельзя ли сразу выполнить проход по списку значений, получая в for ссылку на элемент? В D2007 нельзя, но может, в новых дельфях можно? Вот, как в новых C++: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 19:47 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Нельзя ли сразу выполнить проход по списку значений ъъъъъ получая в for ссылку на элемент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 20:07 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Ну если тебе прям очень надо - возьми rtti. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2021, 21:58 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Нельзя ли сразу выполнить проход по списку значений, получая в for ссылку на элемент? Код: pascal 1. но возможно ObjectData будет ридонли, не могу сейчас в дельфах глянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 07:25 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Vizit0r возможно ObjectData будет ридонли, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 12:39 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Ну если тебе прям очень надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 12:40 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Тут скорее был вопрос: может я чего не вижу? Публичный интерфейс словаря не предоставляет нужной тебе функциональности. Поэтому, если оптимизировать доступ хочется не из любви в искусству, то остаётся только rtti. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 14:50 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Поверхностно тут сильно не соптимизируешь. TDictionary не особо рассчитан на такие последовательны проходы по циклу как в 1 цикле. Тут нужно 1. Понять действительно ли нужно выжимать эту оптимизацию. если нужно то варианты 1. написать наследник или хелпер к TDictionary с прямых проходом по FItems 2. раскидать айтемы с разными статусами по разным TDictionary. Нужно знать насколько часто происходит чтение и запись статусов, что нужно в первую очередь быстрее. 3. Знать какая природа у TSharedHandle. Может они идут подряд или почти и можно их положить в массив. 4. использовать другие реализации TDictionary (я знаю варианты в 3-4 раза быстрее). Или придуматьб другую структуру, более подходящую для этой задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:05 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, rtti это сразу намного медленее (на порядок). Какая тут оптимизация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:07 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
swame2 rtti это сразу намного медленее (на порядок). Какая тут оптимизация. А если подумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:13 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Добраться до FItems и GetBucketIndex, запомнить адреса и юзать напрямую ? можно, но выглядит как-то громоздко, еще, и зависит от реализации RTL. Думаю что проще свою структуру сделать, но для этого данных в вопросе недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:32 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=16&tid=2037195]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 164ms |

| 0 / 0 |
