|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
Всем привет, столкнулся с невозможностью использования быстрых парсеров типа Utf8JsonReader или Utf8Json от neuecc ввиду того, что они могут вызываться только в синхронных методах, в то же время получение результата http-запроса в байтовом представлении возможно только через метод _httpClient.GetByteArrayAsync(), который не имеет синхронной версии. Использование в итераторах тоже невозможно. Соответственно вопрос- можно ли каким- либо образом использования Utf8JsonReader или аналогов для парсинга JSON-документов, полученных через http-запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 12:58 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, Никто и ничто не запрещает вызывать синхронные методы внутри асинхронных. Запрос данных по сети - это IO-операция, поэтому она должна быть асинхронной. Поэтому у HttpClient асинхронные методы. Парсинг json - это CPU-bound операция, поэтому она синхронная. Но вызвать-то её можно в любом методе. Опять же, можно обернуть её в Task.Run. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 23:38 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, https://docs.microsoft.com/ru-ru/dotnet/api/system.net.http.httpclient.getstreamasync?view=net-5.0 https://docs.microsoft.com/ru-ru/dotnet/api/system.text.json.jsonserializer.deserializeasync?view=net-5.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 01:45 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
прикольно если приложуха упирается в скорость парсинга..дай боже всем такие нагрузки ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 08:32 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
petalvik, единственная реализация, которая заведется это Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
но в данном случае дополнительно получаем аллокацию в виде возвращаемого листа, что может срезать весь перфоманс от использования Utf8JsonReader, кроме того, если в методе есть Utf8JsonReader, то нельзя использовать yield return и асинхронный методы и Код: c# 1.
В общем приходится искать странные компромисные решения, которые не факт в итоге окажутся производительнее. Такое ощущение, что Utf8JsonReader сделан исключительно для чтения в полностью синхронных потоках-типа файлов с диска, но не для асинхронных http-запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 09:07 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
hVostt не подойдет, потому что Utf8JsonReader принимает в качестве источника данных только байтовый массив. С помощью стримов сделана текущая реализация, на больших объемах json и большом их количестве хотелось бы ускорить участок парсинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 09:14 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, если чтение производится по очень загруженному\узкому каналу связи, например с марсоходом :D, или с магнитной ленты, или с диска, но при условии, что значения в JSON файлы титанических размеров, то есть время чтения значения "ноды" будет занимать неразумное время, то это вполне имеет смысл ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2021, 14:14 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, вы ссылки открывали? на вход подаёте стрим, на выходе десериализованный объект, асинхронно. какой ещё Utf8JsonReader? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 10:12 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
hVostt, ссылки открывал, на данный момент для десериализации использую вариант со стримом в качестве основного-с ним проблем нет по части выполнения функционала, однако очень много аллоцируется памяти для JsonDocument-я хотел бы исключить этот момент. hVostt vb_sub, какой ещё Utf8JsonReader? этот ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 10:48 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, вы сырые данные хотите доставать или десериализовать в объекты? аллокация памяти -- не всегда проблема, есть причина, по которой вы с боретесь с аллокацией? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 11:01 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
hVostt, да хочу читать сырые данные из Json-документа, считывать значения нужных нод. Причина- хочу сделать максимально возможно качественный код по парсингу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 11:07 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
vb_sub, https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonTextReader.htm поддерживает асинхронный интерфейс, работаете а JSON напрямую ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 11:39 |
|
Использование высокопроизводительных JSON-парсеров для http запросов
|
|||
---|---|---|---|
#18+
NewtonsoftJson еще хорош. Кому интересны бенчмарки милости прошу- результаты на любой вкус. Код: 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. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 14:42 |
|
|
start [/forum/topic.php?fid=18&msg=40060921&tid=1354548]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 131ms |
0 / 0 |