Что нового

GUICtrlCreateListView vs _GUICtrlListView_Create - в чем разница?

saavaage

Знающий
Сообщения
171
Репутация
17
Суть проблемы отражена в шапке: не пойму принципиальной разницы между использованием одной и другой функции.

Если можно, то ответ структурировать по следующим пунктам:
1. Разница в возможности использования стилей: Есть /нет - Насколько принципиальная
2. Разница в обработке (отображение/производительность) больших массивов данных (строк): Есть /нет - Насколько принципиальная
3. Разница в подключении доп. функционала: Есть /нет - Насколько принципиальная
4. Разница в применении в различных контроллах (например, Tab): Есть /нет/ какие контроллы отличаются/Насколько принципиальная
5. прочие нюансы

Пока выяснил следующее:
1. судя по всему разница по п. 1 есть - список стилей в _GUICtrlListView_Create, на первый взгляд, будет побогаче;
2. сегодня протестил словарь на 22500 строк - и все нормально отобразилось в окне вывода в обоих случаях (я ожидал, что здесь будет ограничение у GUICtrlCreateListView в 4000).

По остальным пунктам пока вообще сказать нечего.

Заранее благодарен за любую помощь.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
*click*

+ блиц ответы:

1. Нет.
2. Нет (за редким исключением для ListViewItem).
3. Нет.
4. Нет.
5. _GUICtrl*_* работают с хендлами, а GUICtrl* с внутренними идентификаторами (ID).
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
saavaage [?]
я ожидал, что здесь будет ограничение у GUICtrlCreateListView в 4000
Да, это я промахнулся. Видимо в последних версиях это ограничение сняли, хотя в списке изменений об этом вроде не упоминается. Но в любом случае, GUICtrlCreateListView ограничен общим числом всех созданных элементов в GUI (65532 элемента), а, например _GUICtrlListView_InsertItem нет.

Разница в обработке (отображение/производительность)
UDF медленнее, хотябы при добавлений элементов.
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
Yashied, CreatoR, Спасибо за разъяснение.

CreatoR, под "GUICtrlCreateListView ограничен общим числом всех созданных элементов в GUI (65532 элемента)" имеется в виду весь Gui (все элементы формы) или только элементы ListView? Почему переспрашиваю - как-то странно это выглядит (ограничение на все элементы формы)...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
UDF медленнее, хотябы при добавлений элементов.

Функции добавления в ListView из UDF по умолчанию работают на порядок быстрее GUICtrlCreateListViewItem(), если конечно имеется ввиду это.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Функции добавления в ListView из UDF по умолчанию работают на порядок быстрее GUICtrlCreateListViewItem()
Не знаю, у меня обратный результат:

Код:
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>

$GUI = GUICreate("(UDF Created) ListView Create", 400, 460)

$hListView = _GUICtrlListView_Create($GUI, "Column", 2, 2, 395, 200)
$nListView = GUICtrlCreateListView("Column", 2, 230, 395, 200)

$iTimer = TimerInit()
For $i = 1 To 10000
	_GUICtrlListView_InsertItem($hListView, "Item" & $i)
Next
GUICtrlCreateLabel("UDF LV Time: " & TimerDiff($iTimer), 20, 210)

$iTimer = TimerInit()
For $i = 1 To 10000
	GUICtrlCreateListViewItem("Item" & $i, $nListView)
Next
GUICtrlCreateLabel("Native LV Time: " & TimerDiff($iTimer), 20, 440)

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


Код:
UDF LV Time: 2512.86079395938
Native LV Time: 379.79836310323
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Не знаю, у меня обратный результат:

Хех, ну значит пофиксили это. По крайней мере в 3.3.0.0 это было так. Я даже помню кучу тем на оф. форуме, связанных с этой проблемой.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR
У меня (старый ноутбук Samsung P29 Windows XP SP3) с Вашим вариантом:
Код:
UDF LV Time: 8641.90364976554
Native LV Time: 970.132796207339
Если заменить
Код:
;...
For $i = 1 To 10000
    _GUICtrlListView_InsertItem($hListView, "Item" & $i)
Next
;...
; на
;...
Dim $aItems[10000][1]
For $i = 0 To UBound($aItems) - 1
	$aItems[$i][0] = "Item " & $i + 1
Next
_GUICtrlListView_AddArray($hListView, $aItems)
;...
То UDF значительно ускоряется, но... все равно нативным способом получается быстрее:
Код:
UDF LV Time: 2455.88391820748
Native LV Time: 963.895690653421
 
Верх