Мое приложение Win32 во время работы выполняет множество дисковых операций в назначенной временной папке, и о серьезном изменении ее структуры не может быть и речи.
Некоторые клиенты имеют антивирусное программное обеспечение, которое сканирует один и тот же временный каталог (оно просто сканирует все). Мы пытались уговорить их отключить его - это не работает, поэтому об этом тоже не может быть и речи.
Время от времени (что-то вроде одного раза на каждую тысячу файловых операций) мое приложение пытается выполнить операцию с файлом, который в это же время открывается антивирусом и поэтому блокируется операционной системой. Нарушение обмена происходит и вызывает ошибку в моем приложении. Это происходит в среднем раз в три минуты.
Временная папка может содержать до 100 тыс. Файлов в большинстве типичных сценариев, поэтому мне не нравится идея открывать их постоянно, поскольку это может привести к нехватке ресурсов в некоторых пограничных условиях.
Есть ли у моего приложения разумная стратегия реагирования на ситуации, когда нужный файл заблокирован? Может быть, что-то вроде этого?
for( int i = 0; i < ReasonableNumber; i++ ) {
try {
performOperation(); // do useful stuff here
break;
} catch( ... ) {
if( i == ReasonableNumber - 1 ) {
throw; //not to hide errors if unlock never happens
}
}
Sleep( ReasonableInterval );
}
Это жизнеспособная стратегия? Если да, сколько раз и как часто мое приложение должно повторяться? Какие есть лучшие идеи, если таковые имеются?