- PVSM.RU - https://www.pvsm.ru -

Переводчикам на заметку: ускорение работы ABBYY Lingvo и других инструментов

Электронный словарь сегодня стал одним из основных инструментов переводчика, наряду с браузером, оцифрованными справочниками и базами соответствий [1] (последнее важно в основном лишь для переводчиков нехудожественных текстов).

Среди электронных словарей ABBY Lingvo отличается одной ключевой особенностью: полнотекстовым поиском с индексацией. Что-то похожее можно реализовать при помощи индексов в Adobe Acrobat, но удобство интерфейсов именно в словарной области не подлежит сравнению.

ABBY Lingvo давно уже превратился из обычного словаря в универсальный агрегатор источников. Вдобавок к титанической работе фирмы-создателя, энтузиастами оцифрованы в формат Lingvo сотни пособий, в том числе и основные двуязычные, и огромные многотомные толковые словари серий Cambridge, Collins, Longman, Merriam-Webster, Oxford, и энциклопедические словари вроде Британики. Созданы локальные копии сетевых гигантов (Википедий, Викисловарей, Urban Dictionary и так далее). И при обычном использовании это предоставляло бы исключительные возможности. Но при полнотекстовом поиске всё это богатство превращается ещё и в языковые корпусы и базы соответствий. Значение такого поиска при переводах сложных терминов, устойчивых словосочетаний, фразеологизмов трудно переоценить.

С каждым выпуском ABBY расширяет допустимые границы компилируемых словарей и поисковых индексов. Уже сейчас можно скомпилировать словарь размером почти в 2 гигабайта исходного текста. Однако при подключении большого количества словарей индекс разрастается. И сами словари на диске, и поисковый пользовательский индекс также могут достигать гигабайтных размеров. При этом полнотекстовый поиск замедляется, на него начинает влиять скорость работы винчестеров. Эпоха развития SSD может помочь в решении этой проблемы, но пока эти механизмы ещё не используются повсеместно из-за большей цены и меньшей износоустойчивости. К счастью, есть способ, по приросту скорости выигрывающий даже у SSD.

Можно заставить программу переместить сами словари и поисковые индексы с диска в память. Вернее, мы сами их туда переместим, а программа будет продолжать работать с ними так, будто они всё ещё находятся на винчестере. Поможет нам в этом старое проверенное средство — RAM-диск.

Существует много программ, создающих подобие диска в памяти. Особое внимание нужно обратить на те, которые позволяют использовать память, недоступную для других нужд.

В современных 32-разрядных не-серверных Windows есть две основные границы использования памяти: программное ограничение до четырёх гигабайт [2], которые урезаются до трёх особенностями выделения памяти для устройств [3]. По этим причинам сколько бы памяти вы не поставили, основные пользовательские Windows не увидят больше 3-х гигабайт плюс/минус ещё чуть-чуть.

Однако для указанных ограничений есть свои обходные пути: PAE [4] и memory remapping (memory hole, PCI hole [5]). Поэтому, если у вас не 64-разрядная или не серверная система и при этом трёх гигабайт памяти не хватает для размещения там RAM-диска со всем нужным, придётся включать все эти штуки. Биос лучше проверить самостоятельно: например, в этой полезной статье [6] определённым устройствам отказывают в поддержке описанных обходных путей, однако я в биосе своей обречённой старенькой материнской платы таки нашёл опцию «memory hole», после включения которой всё заработало как нужно.

Перед всеми описываемыми манипуляциями полезно зарезервировать важные данные и создать актуальный образ системы для восстановления, если что-то пойдёт не так.

На сегодняшний день есть две хорошо известные программы, позволяющие использовать всю невидимую для системы память: Primo Ramdisk (VSuite Ramdisk II) [7] и SuperSpeed RamDisk Plus [8]. Если же кто планирует обойтись тремя гигабайтами, можно обратить внимание и на очень быстрый (а по некоторым данным — см. здесь [9] и здесь [10] — самый быстрый) RAMDisk Enterprise [11]. Все эти программы позволяют сбрасывать содержимое RAM-дисков в образы на винчестер перед выключением компьютера или перезагрузкой и восстанавливать образы в память на самой ранней стадии загрузки системы. Хотя это и будет замедлять саму загрузку, будущий выигрыш стоит даже минутной задержки при запуске.

Большинство материнских плат для десктопов и ноутбуков последних 6-7 лет позволяют устанавливать до 8 гигабайт памяти. Сейчас это уже довольно недорогое удовольствие, и данного размера должно хватить даже для самого богатого набора словарей в Lingvo. Однако в крайних случаях можно обойтись и меньшим размером.

Что же можно переместить в Lingvo на RAM-диск?

1. Самое простое — это словари, как пользовательские, так и системные. Пользовательские словари пользователь подключает сам, поэтому он знает, где они находятся. Системные словари на Windows XP находятся в папке c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0DicSystem.

Обе группы словарей можно оставить на их прежнем месте для резерва, а программе указать на папки-копии при помощи файлов словарной конфигурации. Для пользовательских словарей это файл %USERPROFILE%Local SettingsApplication DataABBYYLingvo15.0Dicdictconf.ini, для системных — c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0Dicdictconf.ini. В обоих файлах нужно при помощи автозамены подменить старые адреса на новые, перед этим не забыв сохранить резервные копии обоих ini-файлов. Если же этот способ покажется неудобным, можно прибегнуть к описанному в следующих пунктах.

Естественно, все описанные в этом и следующих пунктах манипуляции нужно делать после закрытия программы и выгрузки её из памяти (Lingvo может долго завершать работу, проверять лучше по программам, отображающим активность процессов).

2. Можно переместить папку с самой программой и бинарными библиотеками (c:Program FilesABBYY Lingvo номер_версии). Возможно, разительного прироста скорости это не даст, но что-то можно выиграть. Тем более что в этой папке размещаются также многочисленные файлы .amd и .amm, отвечающие за морфологию. Если программа сама не загружает их в память, а подгружает с диска при необходимости, тогда перемещение имеет смысл.

3. И наконец — словарные индексы. К системным словарям это будет папка c:Documents and SettingsAll UsersApplication DataABBYYLingvo15.0Index, к пользовательским — %USERPROFILE%Local SettingsApplication DataABBYYLingvo15.0NonAbbyyIndex (хотя можно перенести и всю родительскую папку; для системных словарей лучше этого не делать, потому что вместе с индексом в родительской папке находятся и звуки, которые весят много, а нужны редко).

Здесь следует оговорить ещё одну трудность. Если перемещение словарей можно подкрепить редактированием файлов конфигурации, то перемещение индексов и самой программы вещь более заковыристая. Но тут нам поможет одно средство, работающее, к сожалению, только на файловых системах NTFS (к счастью, сам RAM-диск может быть и в системе FAT-32: она быстрее, а надёжность и отказоустойчивость при сбоях нам тут не так важна). Это средство — точки соединения NTFS [12]. Primo Ramdisk (VSuite Ramdisk II) имеет встроенную утилиту [13] для их создания, но можно воспользоваться и утилитой Junction [14]. Алгоритм очень прост: копируем папку на RAM-диск (переназвать её там можно как угодно), для резерва переименовываем оригинальную папку во что-то вроде «оригинальное_название_bak» и создаём к копии точку соединения в родительской папке оригинала с оригинальным названием. Всё работает прозрачно, программа не будет делать никакого различия между прежней работой с оригиналами и новой переадресацией к копиям.

При полноценном перемещении ускоряется запуск и закрытие программы, синхронизация списка слов с полем ввода слова, переключение языков, поиск слова и открытие карточек, но особенно разительно — во много раз — ускоряется полнотекстовый поиск.

***

Работу с RAM-диском стоит также взять на вооружение тем, кто оцифровывает словари. Иногда приходится работать с текстовыми файлами гигабайтных размеров. И хотя есть текстовые редакторы для работы с такими громадными исходниками, редактирование и операции замены происходят при этом очень медленно. Если же поместить исходник в память, и редактирование ускорится, и компиляция, возможно, также пойдёт быстрее.

Все эти навыки можно применить и к другим программам. Поскольку браузером переводчики пользуются сейчас столь же часто, как и словарями, стоить подумать о перемещении в память браузерных профилей с их базами данных, а также браузерных кэшей. К счастью, статей об этом много, даже на одном только Хабре.

Автор: vmb


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/windows/14394

Ссылки в тексте:

[1] базами соответствий: http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%BE%D0%B2

[2] программное ограничение до четырёх гигабайт: http://msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx

[3] особенностями выделения памяти для устройств: http://en.wikipedia.org/wiki/3_GB_barrier

[4] PAE: http://ru.wikipedia.org/wiki/PAE

[5] PCI hole: http://en.wikipedia.org/wiki/PCI_hole

[6] этой полезной статье: http://www.romexsoftware.com/en-us/knowledge-base/invisible-memory.html

[7] Primo Ramdisk (VSuite Ramdisk II): http://www.romexsoftware.com/en-us/primo-ramdisk/index.html

[8] SuperSpeed RamDisk Plus: http://www.superspeed.com/servers/ramdisk.php

[9] здесь: http://pc-hard.ru/softarticles/77-ramdisk-dataram-softperfect-qsoft-sravnenie.html

[10] здесь: http://fiehnlab.ucdavis.edu/staff/kind/Collector/Benchmark/RamDisk/ramdisk-benchmarks.pdf

[11] RAMDisk Enterprise: http://ramdisk.nm.ru/ramdiskent-rus.htm

[12] точки соединения NTFS: http://ru.wikipedia.org/wiki/NTFS_junction_point

[13] встроенную утилиту: http://www.romexsoftware.com/en-us/primo-ramdisk/instructions-mini-tools.html

[14] Junction: http://technet.microsoft.com/ru-ru/sysinternals/bb896768