понедельник, 29 сентября 2014 г.

Коротко. Сделали нагрузочные тесты

По мотивам - Депрессия. Или превратности hResult и прочих ErrorCode

Сделали нагрузочные тесты. С нескольких клиентов.

Вот кстати код теста:

USES
 QuickTestsUtils.script
;

Тест TK565491886

 ARRAY VAR "Список документов"
 [ Конституция ГК НК ТК ТНВЭД ОКОФ ОКОНХ ] >>> "Список документов"         

 BOOLEAN VAR Вечность
 ДА >>> Вечность 
 ПОКА Вечность (
          INTEGER VAR "Случайный документ"
          ( "Список документов" array:Count Random "Список документов" [i] ) >>> "Случайный документ" 
     Параметры: ( "Документ из базы {("Случайный документ")}" )
     Выполнить ( 
  "Набить текст {('Вносим изменения в текст и сохраняем документ!!!')}"
  "Нажать Enter" // - чтобы отделить параграфы документа, иначе параграфы могут быть "слишком длинными" для восприятия
  "Сохранить документ"
  "Обработать сообщения" // - чтобы приложение перерисовывалось
   )
        )
;

TK565491886

Молотят уже пятый день.

Ошибок - не выявлено.

Выявлены лишь ошибки функций ReadFile и WriteFile. В основном - LOCK_VIOLATION. Мы их теперь обрабатываем в цикле и протоколируем.

Будем увеличивать число клиентов.

P.S. Ну и разрулил "бутылочное горлышко". Стало всё сильно быстрее. И сильно меньше "конфликтов с залочками".

Я писал ранее - Про "рефакторинг":

"И ещё сегодня я нашёл два "бутылочных горлышка" - AllocNewFATAlement и AllocNewCluster. Они в свою очередь ведут к LockFile, Лочим заголовок. Где записана информация о структуре хранилища. И все пользователи при записи "бъются от эти залочки".

И знаю уже как это разрулить.

Надо упреждающе аллоцировать не один FATElement и Cluster, а сразу несколько (пять, десять, двадцать). Одним куском. Учитывая, что кластеров в файле обычно не один и не два и даже не десять, то это - эффективно. И держать список свободных локально у клиента. А потом когда клиент закрывается - возвращать их в список свободных. Т.е. "не пригодившихся". Чтобы из потом могли использовать другие клиенты.

Есть конечно вероятность - потерять элементы, если клиент завершится аварийно.

Но зато - мы реже попадаем в "бутылочное горлышко"."

-- ну вот это и "разрулил".

И нашёл ещё "пару подобных мест". Но не таких критичных.

Комментариев нет:

Отправить комментарий