У меня есть приложение, получающее сообщения из разных источников (чаты и частные чаты). можно открыть несколько экземпляров приложения, а конечный результат должен быть что-то подобное следующему сценарию:Управление журналами чатов, производительность
В настоящее время каждое приложение сохраняет журналы в каталоге, имя которого учетная запись, используемая для входа на чат-сервер; в то время как это не проблема для частных источников чата (уникальная для каждого экземпляра приложения), бесполезно, чтобы одни и те же журналы сохранялись несколько раз, в отношении общих чатов. Журналы сохраняются в текстовом формате, поэтому их можно получить и прочитать, не прокладывая их через приложение.
Если я не сохраняю журналы в отдельных папках, я могу получить исключения I/O из-за одновременного доступа к одному и тому же файлу из нескольких процессов, и мне нужно будет проверить, будет ли строка, подлежащая сохранению, hasn ' t уже были написаны другими приложениями. Мне нужно оптимизировать всю операцию и попытаться сохранить читаемость кода.
Кроме того, мой текущий подход к написанию линий заключается в следующем:
public void Write(string message)
{
using (var writer = new StreamWriter(_fileName, File.Exists(_fileName)))
writer.WriteLine(message);
}
Что, учитывая, что журналы постоянно написано, может быть не самым эффективным решением.
Подвел, мои вопросы:
- Как создать уникальную папку базу данных/журналов, сохраняя их формат (обычный текст), но решения вышеупомянутых дублей/проблемы доступа?
- Как улучшить, если возможно, метод записи? Помните, что журналы должны быть постоянно записаны, но закрытие
StreamWriter
, когда приложение выходит, не будет правильным решением, так как приложение предназначено для работы в течение длительного времени.
спасибо.
Почему вы не используете рамки протоколирования, таких как log4net? –
@AaronMcIver: Хотя это справедливо, это может не помочь обойти несколько экземпляров, записывающих недвойственные данные в один файл. – R0MANARMY
Ваш эскиз предполагает, что дублирующие журналы из Chatroom 1 будут рассматриваться только как дубликаты в хранилище журналов. Это так? Если да, вы не сможете дедуктировать их с двумя несвязанными экземплярами приложения. –