dred2k
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору SolidSnakeRU Цитата: Потому что не только пишут) У меня был вывод лога в интерфейс при необходимости, кроме того, чтобы при сохранении в файл не было проблем, в условиях работы с несколькими потоками, тоже нужна блокировка. | Ну, это обычная схема. Причем, файл и интерфейс - два разных ресурса, в которые производится запись. Где тут чтение ? У меня так: вызов LogWrite помещает новую запись в потокобезопасную очередь ("обложенную" критической секцией), выставляет эвент "есть запись" и радостно и быстро забывает об этом, не неся, заметь, никаких накладных расходов по времени выполнения (запись в файл, базу и прочее). Диспетчерская нитка лога просыпается по событию "есть запись" и начинает выбирать всю доступную очередь новых сообщений лога, распихивая их по всем зарегистрированным "лог-девайсам" - файлы, базы, интерфейсы... Потом опять засыпает до события о записи (или об остановке). Цитата: Быстродействие - там были какие-то заморочки с этим классом, вроде в новых XE исправлено. У меня не было проблем с тормозами, не замерял разницу. | В большинстве случаев выигрыш от использования более быстрого синхро-объекта будет незаметен. Однако, применять специализированный суррогатный синхро-механизм вместо нативного объекта, да еще там, где это архитектурно не оправдано - "не есть гут", я считаю. Добавлено: Если хочется гарантированной записи в некий лог-ресурс, то у меня это указывается при создании этого ресурса (при старте лог-системы). Тогда LogWrite делает так: если есть такие ресурсы, то производим в них запись синхронно, "под сенью критической секции" опять же (LogWrite работает всегда "под критической секцией" - даже при помещении в очередь, для корректного выставления времени и айди сообщения), а для остальных - через очередь и нитку. Так что все, "что смогло" - в файл, к примеру, поступит, а в интерфейс уже, как бы, может и не дойти (последующий сбой приложения и все такое). Но, как показала практика, это излишне. Очередь работает прекрасно, и этого достаточно. |