|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Привет всем! Имеется последовательность элементов вот такого вида: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Нужно придумать структуру данных для хранения этой последовательности, чтобы она обслуживала вот такой алгоритм: Есть два потока - обновлятель и читатель. Читатель должен иметь возможность 1. Наблюдать эту последовательность всегда упорядоченной по Level 2. Безопасно итерировать по ней без блокировок Обновлятель должен уметь 1. вставлять новые элементы. Что есть новый и что не новый определяется по Id 2. удалять существующие 3. обновлять измеренные значения. В идеале и Level тоже, но если не получится - переживу 4. избегать копирования больших объемов данных при вставках и удалениях 5. по возможности выполнять перечисленные операции за логарифмическое время Изменения происходят со скоростью 10^2 в секунду. Длина последовательности порядка 10^4. Несколько независимых экземпляров этого алгоритма должны работать в одном процессе с разными, никак не связанными экземплярами последовательностей. Экземпляров этих будет порядка 10^1. Читатель просматривает последовательность несколько раз в секунду. Важно, чтобы он всегда просматривал ее в порядке убывания Level. Допустимо, что во время просмотра обновлятель что-то поменяет. Главное, чтобы это обновление не обрушило читателю foreach и не привело к тому, что порядок просмотра перестанет быть упорядочен по Level. Мысли крутятся вокруг очереди с приоритетом. Но тут есть два независимых ключа, по одному идет поиск, а по другому - сортировка. Этого известный мне алгоритм очереди с приоритетом на основе бинарной кучи не поддерживает. Язык реализации C#. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 13:33 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergASh1. Наблюдать эту последовательность всегда упорядоченной по Level А где "эта" последовательность? Measurement1-MeasurementN ? Как она может быть упорядочена по Level? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 13:46 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Извините вопрос снимается. Невнимательно прочитал условие ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 13:47 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergASh, попробуйте ConcurrentBag<T> из https://msdn.microsoft.com/library/Dd997305(v=VS.100).aspx?f=255&MSPPError=-2147217396 orderby для просмотра можно любой сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 13:56 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Cat2, задание мне тут видится академическое и важно сама реализация такой последовательности. как я понял из задания, для многопоточности использовать надо ReaderWriterLockSlim в качестве коллекции использовать LinkedList Чтоб коллекция всегда была сортированной, нам нужно найти то место, куда вставляем элемент, находим такой элемент через бинарный поиск у которого сложность как раз O(log(n)) и вставляем. Всё остальное, точно так же. и т.д. и т.п. бесплатное такое точно делать не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 14:25 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergASh2. Безопасно итерировать по ней без блокировок Roman Mejtes, А п.п. выше как будет работать без блокировок? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 14:40 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Cat2SergASh, попробуйте ConcurrentBag<T> из orderby для просмотра можно любой сделать orderby означает копирование всего контейнера и потом сортировку. Это, мягко говоря, не очень эффективно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 15:11 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergASh, Для foreach блокировка по любому нужна при изменении. Неважно на каком уровне кода. Imho ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 15:15 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergAShCat2SergASh, попробуйте ConcurrentBag<T> из orderby для просмотра можно любой сделать orderby означает копирование всего контейнера и потом сортировку. Это, мягко говоря, не очень эффективно Так как раз и получится "версионная" изолированность обработки, что вроде и надо автору SergAShДопустимо, что во время просмотра обновлятель что-то поменяет. Главное, чтобы это обновление не обрушило читателю foreach и не привело к тому, что порядок просмотра перестанет быть упорядочен по Level. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 15:24 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Во время foreach коллекцию менять нельзя в принципе - это в сам .NET встроено. Будет иксепшен. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 16:48 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
смысл в том, чтоб вставлять элементы с учётом их положения после сортировки. Так как список изначально (по заданию) сортирован для него доступен бинарый поиск, который соответствующий "логорифмической сложности" O(log2n) что соответствует заданию Нужно найти положение элемента и вставить его через Insert в List<T> Вот примерный, вариант для вставки элемента в коллекцию, с учётом сортировки Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 20:58 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Roman Mejtes Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
слегка подправил ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 21:01 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
В данном примере идет вставка с задержкой в 10 мс (10^2 в секунду) элементов MyStruct, генерируются значения случ. образом. Каждую секунду коллекция перебирается, подсчитывается её размер и суммарный Measurement и отображается на экран В коллекции _list элементы всегда в обратной сортировке по Level, по этому читая итератором всегда нужная последовательность. Добавление\Обновление происходит с O(log2n) Пример на коленке сделан, сильно не судите строго Код: c# 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2018, 22:13 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Roman Mejtes, внутри List обычный массив, как следствие вставка и удаление требуют сдвига всех последующих элементов, что не быстро и чем ближе к началу - тем медленнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 09:32 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>SergASh, вчера, 13:33 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21518500][21518500] >… Есть два потока - обновлятель и читатель. Рассмотри вариант, когда обновлятель измерения пишет не в основной список, а в промежуточный циклический массив. Читатель с нужной для него скоростью сначала обрабатывает циклический массив с переписью информации в основной список, а уж затем сканирует основной список. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 11:26 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
fkthatВо время foreach коллекцию менять нельзя в принципе - это в сам .NET встроено. Будет иксепшен.А если свой Enumerator реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:46 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Dima T, В List<T> для получения элемента коллекции по индексу требует O(1), а у LinkedList O(n). Вставка в массив это часть алгоритма и она входит в (n), я пренебрегаю данный работой и считаю её за N. То есть на требования задачи это не влияет. А вообще есть класс SortedSet<T>, в нём сразу реализовано бинарное дерево и всё остальное, можно использовать его. По сути тоже самое. B для вставки, удаления и извлечения объекта там сложно O(log n) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 12:54 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
refregfkthatВо время foreach коллекцию менять нельзя в принципе - это в сам .NET встроено. Будет иксепшен.А если свой Enumerator реализовать? Если свой, то, как бы, можно. Только при этом можно легко нарваться на всякие неприятные вещи, типа, перечисления одного и того же элемента два раза, или наоборот пропуска какого-нибудь элемента. От этого в стандартные коллекции фреймворка и встроена защита в виде запрета на изменение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 15:20 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
fkthat, Даже не в ошибке дело, а в самом смысле. Как будем ходить по элементам если спереди могут всё грохнуть, сзади и прямо под ногами другим потоком? Смысл foreach - обойти список весь, а не топать где ступенька появилась. Единственный вариант без блока это версионность, но подходит ли по условию это к ТС. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 15:44 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
fkthatrefregпропущено... А если свой Enumerator реализовать?Если свой, то, как бы, можно. Только при этом можно легко нарваться на всякие неприятные вещи, типа, перечисления одного и того же элемента два раза, или наоборот пропуска какого-нибудь элемента. От этого в стандартные коллекции фреймворка и встроена защита в виде запрета на изменение.То есть ты против тех задания? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 16:32 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Petro123fkthat, Даже не в ошибке дело, а в самом смысле. Как будем ходить по элементам если спереди могут всё грохнуть, сзади и прямо под ногами другим потоком? Смысл foreach - обойти список весь, а не топать где ступенька появилась. Единственный вариант без блока это версионность, но подходит ли по условию это к ТС. надо CQRS + ES :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 16:33 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>SergASh, вчера, 13:33 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21518500] [21518500] >Имеется последовательность… int ID можно ли рассматривать в качестве индекса "последовательности (вектора) порядка 10^4"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2018, 19:00 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ВМоисеевint ID можно ли рассматривать в качестве индекса "последовательности (вектора) порядка 10^4"? По ID элементы последовательности уникальны. Но они идут не подряд, а случайно. Так что выделить память под все возможные айди не получится если в этом был вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 09:39 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Roman MejtesDima T, А вообще есть класс SortedSet<T>, в нём сразу реализовано бинарное дерево и всё остальное, можно использовать его. По сути тоже самое. B для вставки, удаления и извлечения объекта там сложно O(log n) SortedSet<T> отсортирован по одному ключу. Чтоб найти там элемент по другому ключу нужен полный перебор. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 09:45 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Petro123fkthat, Как будем ходить по элементам если спереди могут всё грохнуть, сзади и прямо под ногами другим потоком? Смысл foreach - обойти список весь, а не топать где ступенька появилась. Единственный вариант без блока это версионность, но подходит ли по условию это к ТС. Эта дилемма понятна. Либо версионность и копирование, либо скорость и хождение по постоянно меняющейся структуре. В этой задаче выбор в пользу последнего. Если вам известен способ достичь версионности более экономно, чем копированием, то хотелось бы узнать как. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 09:48 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Roman MejtesDima T, В List<T> для получения элемента коллекции по индексу требует O(1), а у LinkedList O(n). Вставка в массив это часть алгоритма и она входит в (n), я пренебрегаю данный работой и считаю её за N. То есть на требования задачи это не влияет Входящий поток изменений будет включать вставки, удаления и обновления вперемешку. Поэтому если выбрать массив, то его все время придется двигать, а не только вначале. Это выливается в линейную сложность. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 09:53 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
SergAShSortedSet<T> отсортирован по одному ключу. Чтоб найти там элемент по другому ключу нужен полный перебор. можно использовать несколько SortedSet, по одному на каждый ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 10:07 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Dima TSergAShSortedSet<T> отсортирован по одному ключу. Чтоб найти там элемент по другому ключу нужен полный перебор. можно использовать несколько SortedSet, по одному на каждый ключ.+1 Несколько SortedSet над одной коллекцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 10:29 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Petro123, лучше использовать MSSQL, там ACID реализован хорошо ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 13:01 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
А еще говорят можно CQRS + ES :):) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 13:03 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ViPRosА еще говорят можно CQRS + ES :):) Рад, что такая хорошая технология сегодня на слуху :) Но это в свою очередь означает, что её будут применять там, где она совершенно не нужна, для небольших и односложных проектов, ожидается поток разочарования. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 13:55 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
hVostt, На слуху). Только тема про уровень программирования пониже). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:02 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>SergASh, сегодня, 09:39 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21524160][21524160] >...Но они идут не подряд, а случайно… Тогда рассмотри такой вариант: 1. Создаём одномерный массив aItem и nItem - текущий индекс записи след. Item 2. Создаём SortedDictionary<decimal, int> sdLevel = new SortedDictionary<decimal, int>(); 3. Создаём SortedDictionary<decimal, int> sdID = new SortedDictionary<decimal, int>(); При добавлении Item пишем в массив по индексу nItem, добавляем индекс в словари и nItem++ (а может быть второй словарь и не нужен). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:31 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ВМоисеев, Класс не потокобезопасен. При допиле нужно ставит локи. А по ТЗ нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:38 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Petro123ВМоисеев, Класс не потокобезопасен. При допиле нужно ставит локи. А по ТЗ нельзя. В ТЗ про локи ничего не сказано, только в названии темы "без блокировок", я так понимаю это не из ТЗ, а хотелка ТС`а. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:48 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Dima T, Я привык в тему выносить главное)). Ок. Ждем автора. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:02 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>Petro123, сегодня, 14:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21525291][21525291] >Класс не потокобезопасен… Понимаю, но ранее предложил TC применить демфер в виде циклической очереди. Потоки писателя и читателя разделены. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:09 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Программирование всегда есть компромисс между желаниями и возможности. Возможно ТС стоит переформулировать задачу. Пускай Читатель запрашивает данные только тогда, когда транзакция Обновлятеля закончилась, а не по таймеру ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2018, 23:11 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Cat2Программирование всегда есть компромисс+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 07:04 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>Cat2, вчера, 23:11 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21529956] [21529956] >... Пускай Читатель запрашивает … Подобные конструкции позволяет писать/читать в любой момент разными потоками: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Пусть Обновлятель только пишет данные (Item), Читатель же обновляет структуры и представляет данные ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 09:55 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ВМоисеев, Переименовал бы ты свои ИЗ и ИЧ и ХУ. Читать даже не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 10:31 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ВМоисеев, Да можно всякого напридумывать. Транзакционные механизмы известны. Было бы интересно услышать от ТС физический смысл задачи, тогда оценить риски получения неверной информации было бы легче. У меня впечатление, что это какие-то датчики и их считыватели SergAShДлина последовательности порядка 10^4. Длина последовательности в 10000 - это вообще тьфу, но для скорости Читателя можно разделить Item на два класса. В одном классе только ID и Level, а так же возможно, метка того, что объект находится в обработке. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 10:37 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ИМХО не надо тут хитрые очереди изобретать, стандартная справится ConcurrentQueue ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 10:39 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Dima TИМХО не надо тут хитрые очереди изобретать, стандартная справится ConcurrentQueue Я тоже полагаю, что важность решения задачи сильно преувеличена ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 10:42 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Cat2метка того, что объект находится в обработке. Cat2 Код: c# 1.
почти субд изобрели)). Согласен что нужен выше уровень постановки. Удачи аффтару! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 10:54 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
Petro123, Я субдами думаю :) ================= Как убежденный агностик, я уверен, что нет общих решений, но в каждом конкретном случае можно и нужно находить наилучшее решение. Мир не познаваем, но можно и должно познать его отдельные законы и проявления ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 11:34 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>Cat2, сегодня, 10:37 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21530617][21530617] >...для скорости Читателя можно разделить Item на два класса Покажите, как сиё увеличивает скорострельность. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 11:53 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
если нужна система реального времени, без блокировок, то не надо забывать, что при работе GC для очистки 2 поколения, все остальные потоки тоже блокируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 12:17 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
>Dima T, сегодня, 10:39 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21530625] [21530625] >ИМХО не надо тут хитрые очереди изобретать… На вкус, на цвет. Для ограниченных по времени экспериментов применял и примерно такую конструкцию: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
но это был не C# и не персоналка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 12:25 |
|
Хитрая очередь с приоритетом без блокировок
|
|||
---|---|---|---|
#18+
ВМоисеев>Cat2, сегодня, 10:37 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1296919&msg=21530617][21530617] >...для скорости Читателя можно разделить Item на два класса Покажите, как сиё увеличивает скорострельность. Если последовательность Код: c# 1. 2. 3.
занимает килобайты, то быстрее пройти по тем объектам, которые изменились со времени прошлого изменения. Я же не задачу решаю, а показываю, как бы я решал ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 13:45 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1399316]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 282ms |
0 / 0 |