Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
swame2 Добраться до FItems и GetBucketIndex, запомнить адреса и юзать напрямую ? Именно. swame2 можно, но выглядит как-то громоздко Нормально выглядит. Пилить свою структуру уж точно не проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:39 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Ну по всем элементам выполнить проход без ключей очень просто Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 15:50 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, Только так он не запишет в коллекцию. Это копия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 16:17 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
А в чем проблема? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 18:21 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
kapas А в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2021, 20:17 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, авторВ исходном посте сформирована и задача и проблема Вопрос в моем сообщении (в чем проблема) был чисто риторический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2021, 06:53 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
kapas, Это какой-то свой string helper или стандартный?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2021, 10:54 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
kapas Вопрос в моем сообщении (в чем проблема) был чисто риторический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2021, 12:13 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
alekcvpЭто какой-то свой string helper или стандартный?.. alekcvp, свой. Смысл что он делает, я надеюсь, понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2021, 17:27 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
kapas, Смысл-то понятен, просто он же, по-идее, перекрывает стандартный или там наследование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2021, 18:51 |
|
||
|
Обновление словаря
|
|||
|---|---|---|---|
|
#18+
alekcvp, это record helper поэтому никакого наследования нет. Эти helper-ы в итоге перекрывают helper-ы, определенные в System.SysUtils, т.е. не стандартные. Вообще они сделаны исключительно с целью упростить собственную работу (в том числе реализовать потоковый (fluent) интерфейс). Нотация не затрудняет понимание кода. Реализация примитивная и вынесена в отдельный модуль (подключаю только при необходимости). Но это уже другая история... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 07:45 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037195]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
79ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 290ms |
| total: | 487ms |

| 0 / 0 |
