Почему контрольные точки так сильно влияют на задержку?

Действительно ли вы на самом деле должны записываться в папку данных Program для каждой системы вместо папок (ов) данных для каждого пользователя?

Возможно, вы захотите взять посмотрите Environment.GetFolderPath и следующие Environment.SpecialFolder s:

  • Environment.SpecialFolder.ApplicationData - папка данных для данных приложения, синхронизированная с доменом контроллер, если профиль пользователя находится в роуминге
  • Environment.SpecialFolder.LocalApplicationData - папка данных для данных приложения, локальная и не синхронизированная (полезно для, например, кешей)

EDIT:

Протестировано в Windows 7 x64, пользователь без администратора.

var appData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
var myFolder = Path.Combine(appData, "MyApp");
if(!Directory.Exists(myFolder)) Directory.CreateDirectory(myFolder);
File.WriteAllText(Path.Combine(myFolder, "Test.txt"), "Test.");

Это делает то, что ожидается, т.е. записывается в C:\ProgramData\MyApp\Test.txt. Насколько я могу судить («Командная строка режима администратора»), нет никакой виртуализации UAC.

Двойное редактирование:

Я предполагаю, что произошло то, что в какой-то момент пользователь Administrator записал файлы в вашу папку ProgramData, и, как таковая, виртуализация файловой системы UAC запускается и перенаправляется не-администратор записывает в VirtualStore.

Выполняется ли ваш деинсталлятор как администратор? Если это так, вам может потребоваться проверить путь VirtualStore для пользователя, который инициирует удаление, и фактический путь к файловой системе для удаления данных программы. Я не уверен, есть ли официальный способ сделать это, хотя ...

2
задан gcandal 27 February 2019 в 16:37
поделиться

1 ответ

Время тратится на синхронный ACK'инг сообщений в RabbitMQ (MessageAcknowledgingSourceBase#notifyCheckpointComplete> MultipleIdsMessageAcknowledgingSourceBase#acknowledgeIDs> RMQSource#acknowledgeSessionIDs). Вероятно, это можно сделать асинхронно, как это делает коннектор Kafka.

Поскольку интервал между контрольными точками составляет 3 минуты, а я ввожу 200 эв / с, это означает, что каждая контрольная точка вызывает подтверждение 36k сообщений (200 * 60 * 3), что занимает около 500 мс.

Использование меньшего интервала может помочь иметь более предсказуемую задержку за счет более высокой средней задержки.

0
ответ дан gcandal 27 February 2019 в 16:37
поделиться