Y
Yakov
показывала публичные декларации библиотек со скрытым кодом. Но декомпилированный псевдокод не показывала.
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
показывала публичные декларации библиотек со скрытым кодом. Но декомпилированный псевдокод не показывала.
большинство и так знает что GetItemValue/ReplaceItemValue в 10 раз быстрее чем document.Form = "test"я покажу еще одно преимущество GetItemValue/ReplaceItemValue перед расширенным синтаксисом
в 10 раз быстрее этогоrvalue_object DOCUMENT ;кладет на стек объект DOCUMENT
lvalue_document_field FORM ;кладет на стек адрес поля FORM
push_str_const {test} ;кладет на стек строковую константу
Let ;осуществляет присвоение значения переменной
rvalue_object DOCUMENT ;кладет на стек данных объект DOCUMENT
push_lsx_routine REPLACEITEMVALUE ;кладет на стек вызовов адрес функции NotesDocument.ReplaceItemValue; класс и его функция находятся в библиотеке nlsxbe.dll
push_str_const {Form} ;кладет на стек данных строковую константу
push_str_const {test} ;кладет на стек данных строковую константу
call_routine ;вызывает функцию с вершины стека вызовов
pop ;выталкивает со стека данных неиспользуемый результат функции
большинство и так знает что GetItemValue/ReplaceItemValue в 10 раз быстрее чем document.Form = "test"
не верюДоказывали, что с версии 6 (или 5) работает абсолютно одинаково по скорости
Не веришь, или знаешь (можешь доказать)? если да - обоснуй свою точку зрения. а если нет - не трынди, не засоряй информационное поле планеты.не верю
уважаемый у меня опыт в лотусе свыше 10 летНе веришь, или знаешь (можешь доказать)? если да - обоснуй свою точку зрения. а если нет - не трынди, не засоряй информационное поле планеты
- Don't use lazy field operations in LotusScript: doc.FieldName(0) and doc.FieldName=value is BAD, doc.GetItemValue "FieldName" and doc.ReplaceItemValue "FieldName",value is GOOD. The latter syntax is much faster and provides seamless data type compatibility, and also stores field names with correct case-sensitive naming in the documents.
в любой более менее автоматизированной системы есть агенты, которые по сути занимаются считыванием полей и изменением этих полей (контроль сроков, суммирование, статистика и т.д.) агентов как вы понимаете получается не мало, и то что они делают с полями тоже не мало, и это уже не пару процентов,А учитывая что в реальных рабочих кодах GetItemValue/ReplaceItemValue занимают от силы пару процентов всего времени выполнения, вообще непонятно чего ради волноваться по этому поводу
я гонял на милионах доках по одной записи, на реально действующих агентах, получалось именно в 10 разvar = doc.GetItemValue()(0) быстрее var = doc.Field(0) примерно на 10-20%.
doc.ReplaceItemValue() медленнее doc.Field = "..." примерно на 30% (сейчас уже не помню точно, вроде не больше 30).
Естестсвенно на результаты тестов могли влиять множество факторов, например то что документ был пустой, база тестовая и т.п., но думаю логично предположить что "работает в 10 раз быстрее" это нехилое такое преувеличение.
Желаете померяться? у меня сертификат CLS R5 designer датирован 16 авг 2000 года, получен был через несколько лет работы с лотусомуважаемый у меня опыт в лотусе свыше 10 лет
Я верю, что Вы не верите. Однако, кому какое дело до наших верований?если я сказал не верю, значит так и есть - это аксиома
Имхо, ещё и поменьше, чем пару %в реальных рабочих кодах GetItemValue/ReplaceItemValue занимают от силы пару процентов
А к этому я еще хуже отношусь, так как реально сталкиваюсь с тем, что у людей море бумажек а на деле они их не стоят, хотя ради справедливости стоит сказать что у меня они тоже есть, но по причине того, что требовались чтобы выиграть тендер.у меня сертификат CLS R5 designer датирован 16 авг 2000 года, получен был через несколько лет работы с лотусом
Этот эксперимент надеюсь с сайта ИБМ хотябы?Есть эксперимент, который показывает - на 8.0.2 разница в скорости doc.replaceItemValue "field","" и doc.field="" находится в пределах погрешности измерений.
А Yakov ничего более не расскажет, потому что "раскопки" прекратились.
Для эксперимента создал две ЛС библиотеки.Создание объекта при объявлении переменной - это так называемый синтаксический сахар. Оба варианта компилируются в идентичный (с разницей лишь в номере строки исходного кода) байт-код.
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim doc As New NotesDocument(db)
Dim rti As New NotesRichTextItem(doc, "Body")
End Sub
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim doc As NotesDocument
Set doc = db.CreateDocument
Dim rti As NotesRichTextItem 'Dim rti As New NotesRichTextItem(doc, "Body")
Set rti = doc.CreateRichTextItem("Body")
End Sub
почему не:Dim rti As New NotesRichTextItem(doc, "Body")
Dim rti As NotesRichTextItem
Set rti = doc.CreateRichTextItem("Body")
Создал третью либу с кодом:nvy, ну так вы во втором случае сделайте Set doc = New NotesDocument(db). Почти 200 байт отъело описание метода NotesDatabase.CreateDocument().
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Set db = s.CurrentDatabase
Set doc = New NotesDocument(db)
Set rti = New NotesRichTextItem(doc, "Body")
End Sub
Dim doc As New NotesDocument(db)
Dim doc As NotesDocument
Set doc = New NotesDocument(db)
Опечатка/описка. Исправил в посте.почему не:
Код:Dim rti As NotesRichTextItem Set rti = doc.CreateRichTextItem("Body")
With doc
call .replaseItemValue("itemName", itemValue)
End With
Dim doc As NotesDocument
Set doc = New NotesDocument(db)
Dim doc As NotesDocument
Set doc = db.CreateDocument
Мои эксперименты показывают, что байт-код в первом случае получается короче. Аналогичная картина для New NotesRichTextItem против doc.CreateRichTextItem. Так что использование New выгоднее. Правда он в COM не поддерживается, но для ЛС это не принципиально.и что-то я не понял
это
лучше чем это?Код:Dim doc As NotesDocument Set doc = New NotesDocument(db)
Код:Dim doc As NotesDocument Set doc = db.CreateDocument
Обучение наступательной кибербезопасности в игровой форме. Начать игру!