|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Бинарный файл board.tjb содержит данные (блоки) разного типа (int long sring …) Всё содержимое бинарного файла я считываю в массив типа Byte Для поиска строк в блоке текста я использую ф-ю InStr, но для этого приходится сначала «перегнать» блок в строковую переменную. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
А нельзя ли как-то совместить некую строковую переменную с элементами с 100 по 200 массива b , чтобы избежать копирования блока в переменную (некий аналог ссылок из С++) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 22:08 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., Можно не перегонять байтовый массив в строку, а сразу искать нужный паттерн в массиве. авторFor i = 100 To 200 str = str & Chr(b(i)) Next i Очень медленный вариант. Копирование по-одному байту в цикле. Лучше скопировать сразу весь блок в 100 байтов в строку с помощью API функции CopyMemory. авторА нельзя ли как-то совместить некую строковую переменную с элементами с 100 по 200 массива b , чтобы избежать копирования блока в переменную (некий аналог ссылок из С++) ? Если бы VB6 поддерживал Union как Си или PowerBasic можно было бы легко совместить. А так имхо простого варианта нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 23:11 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., используй функцию StrStrA ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 23:58 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., во первых, вы можете читать не в байтовый массив, а сразу в строку. Если какой-то другой, не показанной логикой определяется необходимость работы именно с байтовым массивом, то поразглядывайте вот такой вариант кода: (он не для всякого содержания произвольного файла правильно отработает, могут быть кости в много слов, но все равно поглядите.) Вариант, кстати, не единственный, но смысла пускаться в другие особого нет, для некоторого подмножества содержимого файла. В частности - здесь точно подразумевается, что в файле сидят строки в ANSI - кодировке. Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 01:10 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., Кстати, в общих чертах опишите и покажите пример требований к обработке найденного компонента. с этим тоже могут быть интересные варианты, похожие на "аналог ссылок из C++" может быть, накидаю вариант под ваш пример. Для порядка уточните среду выплнения - исполняемый VB6 или VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:13 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Непонятно зачем автор в ручную парсит .tlb файл? Если для этого существует TlbInf32.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:31 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2 Дмитрий П., используй функцию StrStrA Не могу сообразить, как использовать эту функцию в Visual Basic 6.0. Не дадите примерчик? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:09 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Eolt Дмитрий П., Лучше скопировать сразу весь блок в 100 байтов в строку с помощью API функции CopyMemory. Копирования Byte в Byte получается, а Byte в String - нет : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как использовать CopyMemory, для копирования байтов в строку? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 23:35 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. Как использовать CopyMemory, для копирования байтов в строку? Вот так например: Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 23:53 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. ATM-TURBO 2 Дмитрий П., используй функцию StrStrA Не могу сообразить, как использовать эту функцию в Visual Basic 6.0. Не дадите примерчик? https://www.cyberforum.ru/post14970478.html ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 23:56 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Eolt Вот так например: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Ваш код выдает у мееня строку из 9ти пробелов, т.е. CopyMemory не сработала !? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 12:20 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. Ваш код выдает у мееня строку из 9ти пробелов, т.е. CopyMemory не сработала !? Сработала. Только в том коде ошибка небольшая :) Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 13:53 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. ... Ваш код выдает у мееня строку из 9ти пробелов, т.е. CopyMemory не сработала !? вы не показываете, в какую переменную копируете. Если вы заменили определение Dim str1 As String на показанное в стартовом посте Dim str1 As String*100 То в таком случае показанный вариант вызова CopyMemory и не должен работать . Фиксированные строки размещаются на стеке, и StrPtr для них температуру на Марсе показывает. Точка начала копирования для них определяется как VarPtr(str1) + 4, где 4 - длина long переменной, хранящей длину строки... Инициализировать такую пробелами не надо, она на всю свою длину будет инициализирована chr(0) при объявлении. -------- Мне вот любопытно, по какой причине вы мой пост целиком проигнорировали? В заявленном вами случае использование win api не требуется совсем Стандартные строковые функции отлично работают с массивами. При прямой работе с неразжатыми байтами из файла нужно использовать бинарную форму этих функций. Просто и без api... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 14:28 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby, Стандартные строковые функции отлично работают с байтовыми массивами. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 14:36 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., В чем смысл вашего кода? Если парсинг .tlb файла то есть более подходящие способы. Например использование TLBINF32.DLL или вот пример ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 15:02 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Стандартные строковые функции отлично работают с байтовыми массивами. Да, это самое правильное. Если хочется сложностей, то есть LSet, CopyMemory, GetMem/PutMem. Eolt парсинг .tlb файла А прочитать внимательнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 15:06 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
то есть, вы должны были сформулировать свой вопрос так (обратите внимание, ваш код оптимизирован): Дмитрий П. ... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А нельзя ли как-то совместить некую строковую переменную с элементами с 100 по 200 массива b , чтобы избежать копирования блока в переменную (некий аналог ссылок из С++) ? Тогда ответ бы был таким: строку с массивом, нормальным образном - нельзя. Но можно массив со строкой, меняя указатель на начало данных в массиве на необходимую позицию в строке. Но в вашем случае - этого не требуется, по крайней мере, на поверхности. Потому что строковые функции умеют работать с байтовыми массивами напрямую. Заменять решение, построенное на стандартных функциях нужно только при особенно жестких требованиях к производительности. Но, в любом случае, прежде чем это делать, сначала нужно выписать соответствующее задаче решение, построенное на стандартных функциях, и только после этого смотреть, насколько же оно требует оптимизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 16:11 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby, кстати, я сам напорол... конечно буфер в сто символов сможет принять 100 не разжатых байт, потому что его размер - 200 байт. должно быть str = StrConv(MidB(b, 101, 100), vbUnicode) мои извинения (((; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 16:59 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Eolt Сработала. Только в том коде ошибка небольшая :) Да, теперь у меня тоже сработала. Спасибо Но похоже не получится применить CopyMemory вместо побайтного копирования Код: vbnet 1.
поскольку в моем массиве b нет нулей после каждого кода символа ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 17:48 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. поскольку в моем массиве b нет нулей после каждого кода символа Нули это просто кодировка Unicode, чтобы потом строку можно было вывести на экран ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 18:43 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Мне вот любопытно, по какой причине вы мой пост целиком проигнорировали? Простите. Вы писали: Код: vbnet 1. 2.
Нет, мой файл это не имитирует. Я неточно выразился вначале - в блоке поиска не только строки! Я посылаю реальный файл G327.TJB Он создан утилитой CLink (ПО установки внутрисхемного контроля). Формат закрыт, но эмпирически я вычислил где и как представлена нужная мне информация. В файле описаны все цепи и пины (контактные площадки) тестируемой платы. Для каждого пина цепи есть некий блок данных где может появится строка «Component» за которой указано имя компонента (он то мне и нужен), которй мешает щупам установки опуститься на этот пин. Например: - описание цепи «$1N309» с адреса (hex) 175D по 1986 - описание последнего пина «STP3» в этой цепи с 18BE по 1982 - блок поиска «Component» с 193D по 197D. А цель этого поиска выдать в отчет «FU1» (как компонент который мешает щупам опуститься на STP3.) Ваш пример сможет найти «Component» в byte массиве начиная с индекса 193D по 197D ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 18:48 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Для порядка уточните среду выплнения - исполняемый VB6 или VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 18:52 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., конечно поможет! Про всякие другие уточнения я писал, предполагая, что после слова component идет ряд чисел в двоичном представлении, которые необходимо "максимально эффективно" разобрать, вычитывая в некую структуру. С этим могут быть отдельные заморочки, связанные с тем, как фактически записаны такие числа в бинарном представлении в файле - в big-endian или little-endian манере. Главное, если вы всегда читаете файл целиком, для поиска в нем "component" буфер того сорта, который вы описали - не нужен. Но что-то похожее было бы, наверно, нужно при неполном чтении файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 19:05 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Вот этот код распечатает все вхождения Component в ваш бинарный массив. Что с этим делать дальше - вам виднее подставьте свой путь к файлу. (в выложенном вами файле этот код обнаруживает 13 вхождений Component) Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:18 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Главное, если вы всегда читаете файл целиком Читаю файл целиком, но искать «Component» надо строго в неком диапазоне индексов, который определяется для каждого пина динамически. Мой алгоритм обработки TJB такой (упрощенно): 1. ищется строка - имя 1й цепи («$1N1939») 1.1 ищется первый пин этой цепи (строка "C2" и 4 байта 01 00 00 00 т.е. С2.1) 1.1.1 через 82 байта считываю byHead - очень важный байт (поясню, если будет интересно) 1.1.2 далее идет блок байтов где может быть «Component» - (для С2.1 его нет, т.е ничего не мешает опуститься на него) 1.2 ищется след. пин этой цепи (C2.2) ... 2. ищется строка - имя следующей цепи (например «$1N309») 2.1 ищется первый пин этой цепи (D1.1) и его byHead т.е. определяем границы его блок поиска ... 2.3 ищется последний пин этой цепи («STP3») и его byHead т.е. получается блок поиска с 18BE по 1982 и там уже есть «Component» 3. отрабатываются остальные цепи с их пинами ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:42 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Из вышеизложенного понятно что это не подойдет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:45 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:48 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может! ------------------------- Прошу прощенья за дублирование, сообщения куда-то улетали. Оказалось на 2ю страницу ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:52 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может ааа... ну, извини тогда... мне самому жаль, что попытался "отнять у тебя время". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 21:01 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby А все-таки Ваш первый пример работает именно как надо! Код: vbnet 1. 2. 3.
Вот это ближе к моему файлу и Ваш код все равно находит оба "Component" До сего дня я считал что любая строковая функция застревает на нуле. Исследование StrStrA подтвердило это! Сегодня я случайно обратил внимание на фрагмент в моем первом посте, вернее на его боевой аналог (там str обычная, НЕ с фиксированной длиной) и обнаружил что в конце цикла в переменой str присутствуют символы chr(0) и (другие непринтабельные). И получается что функция InStr (как и InStrB) не застревает на нулях (и находит "Component")! Странно, вроде бы везде пишут что ноль это терминатор. Причем в файле есть блоки поиска где нет "Component" - на чем же тогда функция InStr останавливает поиск? booby , Да, Ваш пример позволит мне избавится от побайтного копирования блока поиска. СПАСИБО! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 17:51 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., Ура! теперь может быть продолжение... как найти автор"C2" и 4 байта 01 00 00 00 т.е. С2.1 - рассказывать, или теперь уже сами сообразите? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 18:20 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. booby А все-таки Ваш первый пример работает именно как надо! Код: vbnet 1. 2. 3.
Вот это ближе к моему файлу и Ваш код все равно находит оба "Component" До сего дня я считал что любая строковая функция застревает на нуле. Исследование StrStrA подтвердило это! Сегодня я случайно обратил внимание на фрагмент в моем первом посте, вернее на его боевой аналог (там str обычная, НЕ с фиксированной длиной) и обнаружил что в конце цикла в переменой str присутствуют символы chr(0) и (другие непринтабельные). И получается что функция InStr (как и InStrB) не застревает на нулях (и находит "Component")! Странно, вроде бы везде пишут что ноль это терминатор. Причем в файле есть блоки поиска где нет "Component" - на чем же тогда функция InStr останавливает поиск? booby , Да, Ваш пример позволит мне избавится от побайтного копирования блока поиска. СПАСИБО! Если Вам нужно именно оптимальное решение, то это неверный путь. Т.к. при каждом вызове InStrB происходит преобразование массивов в строки, т.е. создаются временные Variant переменные которые потом преобразуются в Variant содержащие строки - по сути тоже что у Вас было изначально. InStr предназначена для работы со строками, а не с массивами. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:09 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, вы про "premature optimization" когда-нибудь слышали, или про "критикуя предлагай"? Что касается преобразования, то ваше утверждение-преостережение сводится к указанию на полное копирование массива при каждом поиске. В приципе, это достаточно легко проверяется экспериментальным путем, и, если оно на самом деле справедливо в полной мере (чего я не знаю точно), то содержательно переход от "плохого" кода к "хорошему на строках" происходит легко. У человека разумного механизма поиска в руках вообще не было. Теперь есть. Это совсем даже близко не то же самое "что было с самого начала", хотя бы по числу конкатенаций, и, тем более, по общей структуре кода. Хотя на 20-килобайтных файлах разницу в скорости все равно будет измерить трудно. Вы как-то свое свое утверждение о полном копировании можете аргументировать? Вместе с тем, "ещё лучше" для него, может быть почти со 100% вероятностью , и особенно в условиях именно VB6, окажется самописный Кнут-Моррис-Пратт. Если уж и переходить, конкретно от instrb над массивами, то гораздо лучше в его окружении, переходить не к работе с чистыми строками, а сразу к Пратту над массивами, имея на руках версию кода, которая работает целиком на массивах. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:42 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, между, прочим, я бы скорее предполагал, что внутреннее устройство Instr/Instrb состоит в том, что по полученному указателю на строку строится описатель массива, с которым и происходит дальнейшая работа поиска. По крайней мере теоретически, и по крайней мере для instrb, это оставляет возможность компилятору обеспечить прямую работу с полученным байтовым массивом. Все сказанное здесь - лишь версия. Я в прошлом программировал на VB6, сейчас лишь пару-тройку раз в год vba касаюсь, по какому-нибудь несчастному случаю. Так что и многие детали, касательные языка, уже основательно забыты. Но я не помню, не отложилось у меня в памяти ребра именно в указанном вами разрезе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:52 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. До сего дня я считал что любая строковая функция застревает на нуле. Ошибались. В VB нигде не используются нуль-терминированные строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:13 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby ATM-TURBO 2, вы про "premature optimization" когда-нибудь слышали, или про "критикуя предлагай"? Да я уже скинул решение на другом форуме . booby Что касается преобразования, то ваше утверждение-преостережение сводится к указанию на полное копирование массива при каждом поиске. В приципе, это достаточно легко проверяется экспериментальным путем, и, если оно на самом деле справедливо в полной мере (чего я не знаю точно), то содержательно переход от "плохого" кода к "хорошему на строках" происходит легко. Поверь мне, я очень хорошо знаю как работает VB6 и его рантайм. Чтобы не быть голословным скажу что происходит вызов функции __vbaStrVarCopy которая принимая Variant в котором байтовый массив, преобразует его в BSTR посредством вызова VariantChangeTypeEx, которая в свою очередь непосредственно выполняет преобразование с помощью функции BstrFromVector. И это происходит дважды для каждого аргумента. booby Это совсем даже близко не то же самое "что было с самого начала", хотя бы по числу конкатенаций, и, тем более, по общей структуре кода. Хотя на 20-килобайтных файлах разницу в скорости все равно будет измерить трудно. Вы как-то свое свое утверждение о полном копировании можете аргументировать? Да, выше уже написал. "Что было с самого начала" - в алгоритмическом плане, происходит все тоже самое создание временной строки ну и т.п. У ТС задача в совмещении переменных, что явно противоположно. booby между, прочим, я бы скорее предполагал, что внутреннее устройство Instr/Instrb состоит в том, что по полученному указателю на строку строится описатель массива, с которым и происходит дальнейшая работа поиска. Нет. В этом никакого смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:19 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Alibek B. Дмитрий П. До сего дня я считал что любая строковая функция застревает на нуле. Ошибались. В VB нигде не используются нуль-терминированные строки. Везде используются. BSTR - это строка с предпросчитаной длиной и нуль-терминалом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:22 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, уфф... Как вы вообще туда ходите... С таким диким количеством диких баннеров. все проклясть можно только от одного вида... Сдается, у вас там ошибка в алгоритме поиска. Вы безусловно сдвигаете образец в точку обнаруженного несопоставления. Что прямо ошибка, если частичное сопоставление уже произошло. В алгоритме не хватает масива префиксов до настоящего Пратта. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 21:05 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, Я ошибся. Код у вас там правильный. Это меня внешний вид сайта, видимо, ошеломил. Но я не вижу причин не писать в этом месте стандартный вложенный цикл. такой вариант мною на глаз легче воспринимается: Код: vbnet 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.
(накидал без проверки) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 01:31 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2154767]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 414ms |
0 / 0 |