Да не мучаюсь я. Просто интересно было узнать, оптимизирует ли компилятор такой вызов или нет. Похоже, что нет.Ну тогда так и пиши )) Чего мучаешься, раз знаешь решение?
Что это такое ты имел в виду за переборы?когда компилятор додумаетя вместо вызова функций сразу жарить константы(это полный перебор типа)
Set Doc = ws.CurrentDocument.Document
Эта баго-фича всегда была, даже где-то здесь было обсуждение...Если открыть документ (док-А), затем начать писать письмо из почты и не закрыв/не отправив его, переключиться на этот док-А.
Нажать данную кнопку, то в переменную Doc запишется ваше письмо из почты.
Тесты в студию! Для java, javascript согласен, но для lotusscript вызывает сомнение.И перестал бы делать такие проверки:
так гораздо лучше:Код:If CurDoc.old_number(0)<>"" Then
Код:If Len(ndCurrent.getItemValue("ItemName")(0)) <> 0 Then
(Declarations)
Dim TICKS_PER_SEC As Long
Sub Initialize
TICKS_PER_SEC = Getthreadinfo(7)
test_String_Compare
End Sub
Sub test_String_Compare
'данный тест сравнивает явное сравнение строки с пустой строкой и проверку длины строки
Const count = 1000000
Print Cstr(Now) + ": " + Cstr(Getthreadinfo(1)) + ":"
Call test_String_Compare_EqualsString(count)
Call test_String_Compare_EqualsLen(count)
Call test_String_Compare_EqualsString(count)
Call test_String_Compare_EqualsLen(count)
Call test_String_Compare_EqualsString(count)
Call test_String_Compare_EqualsLen(count)
Call test_String_Compare_EqualsString(count)
Call test_String_Compare_EqualsLen(count)
Call test_String_Compare_EqualsString(count)
Call test_String_Compare_EqualsLen(count)
End Sub
Sub test_String_Compare_EqualsString(count As Long)
Dim v As Variant
Dim startTime As Double
Dim endTime As Double
Dim i As Long
Dim bool As Boolean
Dim s As String
s = "dfartethwrghdgsdgas"
startTime = Getthreadinfo(6)
For i = 0 To count
bool = (s = "")
Next
endTime = Getthreadinfo(6)
Print Cstr(Getthreadinfo(1)) & ". Timer = " & Format((endTime - startTime) / TICKS_PER_SEC, "0.000") & " s"
End Sub
Sub test_String_Compare_EqualsLen(count As Long)
Dim v As Variant
Dim startTime As Double
Dim endTime As Double
Dim i As Long
Dim bool As Boolean
Dim s As String
s = "dfartethwrghdgsdgas"
startTime = Getthreadinfo(6)
For i = 0 To count
bool = (Len(s) = 0)
Next
endTime = Getthreadinfo(6)
Print Cstr(Getthreadinfo(1)) & ". Timer = " & Format((endTime - startTime) / TICKS_PER_SEC, "0.000") & " s"
End Sub
В этом случае будет сравниваться время выполнения кучи "лишнего" кода, причем время старта агента, инициализации переменных и сборки мусора будет существенно больше времени выполнения операции сравнения. Вес брутто будет на порядки больше веса нетто.если уж тестировать - надо было циклическим вызовом агента (чтобы был сборщик и инициализация объектов)
Адрес студии?Тесты в студию!
Equal = 0.437
Len = 0.406
Equal = 0.422
Len = 0.406
зато будет учтен именно важный фактор различияВ этом случае будет сравниваться время выполнения кучи "лишнего" кода, причем время старта агента, инициализации переменных и сборки мусора будет существенно больше времени выполнения операции сравнения. Вес брутто будет на порядки больше веса нетто.
Всегда считал, что проверка на неравенство выполняется быстрее, чем 'больше' или 'меньше'.и писать <>0 как-то "неэстетично"- >0