В последнее время я начала присматриваться к быстродействию своих программ в части операций с коллекциями и строками. Одну библиотеку радикально оптимизировала, например, применив новый для себя метод перечисления сразу двух коллекций одновременно (функциями из MSVBVM60.DLL, которые на самом деле стоят за For-Each, но избавляют от прямого взаимодействия с IEnumVARIANT). А началось с того, что меня до ужаса достала программа, парсящая логи ownCloud. Она сначала читает из файла идентификаторы обработанных сообщений в логах, потом парсит необработанные сообщения в файле лога, делая из JSON'ов в JSON'ах читаемые сообщения, сохраняет их в файлы сообщений и снова записывает файл с обновлёнными идентификаторами. И пока всё это продолжается, скрытое окно программы не обрабатывает сообщения, и всякие проводники, рассылающие широковещательные сообщения, вешаются при попытке открыться. Ранее я уже в программе снижала приоритет, чтобы не так грузило процессор. В этот раз я решила напихать DoEvents между обработкой JSON'ов, кою считала основной проблемой. Но оказалось, что загрузка списка занимала меньше секунды, парсинг – меньше секунды, сохранение списка – две-три минуты. Да, там была коллекция, которая долго перечислялась через индекс, а текст наращивался простым «TXT = TXT & Item». Поэтому я сделала так чтобы перечисление шло через «For Each», а текст собирала через Mid() в заранее выделенную строку, длину которой вычисляла отдельным перечислением. В результате программа вместо нескольких минут работает в районе секунды. Можно сказать, вдохновляющий результат!