+  HandyCache форум
|-+  Главная категория» Новые предложения» Доработка процедуры: Очистка кэша
Имя пользователя:
Пароль:
Страниц: 1 2 [3] 4 5 6   Вниз
  Отправить эту тему    Печать  
Автор Тема: Доработка процедуры: Очистка кэша  (Прочитано 99456 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #40 : 09 марта 2007, 13:17:45 »

Подожди. В Last_Access_Times.dat не хранятся ни размеры, ни реквизиты. Только имена файлов и все. Ты о чем?

М-да, тогда расскажи, как ты предлагаешь корректировать переменную CurrentCacheSize при перезаписи файлов, которые уже есть в кэше? Где будешь брать "старый" размер файлов в кэше?

Цитировать
Зачем нам туда лазить? Что искать? Я недопонял.

Представь, мы запросили файл, которого нет ни в List1, ни в List2, но он возмжно есть в Last_Access_Times.dat и нам надо перенести его в конец списка, т.к. дата доступа к нему должна измениться!
Или ты предлагаешь пока записать его в List2, а потом позже уже пересчитать Last_Access_Times.dat?

Цитировать
Посмотреть файлы никто не запрещает. Чтение файла картины не изменит.

Я говорил о просмотре перед удалением из кэша средствами "Историка", ТotalСommander-а и т.п.
Т.е. файл будет удален из кэша сторонней программой и HC об этом не узнает!

Цитировать
Перенос кэша целиком с одного компьютера на другой - тоже.

Целиком кэш на флешку не всегда влезет - они носят его отдельными каталогами или только самые "свежие" файлы по дате изменения.

Цитировать
Если кто-то все же не может не менять кэш вручную (хоть мне и непонятно, для каких целей это может быть нужно), пусть после этих действий жмет специальную кнопку в программе и Last_Access_Times.dat будет создаваться с нуля, что займет n-ное количество времени.

Если с нуля, то информация о датах доступа к файлам в Last_Access_Times.dat окажется неверной, т.к. на диске она может сбиваться по разным причинам! Собственно, из-за этого и было предложено ее хранить где-то отдельно!
« Последнее редактирование: 09 марта 2007, 13:28:53 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #41 : 09 марта 2007, 13:38:06 »

DenZzz
Цитировать
М-да, тогда расскажи, как ты предлагаешь корректировать переменную CurrentCacheSize при перезаписи файлов, которые уже есть в кэше? Где будешь брать "старый" размер файлов в кэше?
А как делается перезапись? Берется старый файл, открывается, его содержимое стирается и заполняется новым. Вот когда файл "берется", мы и узнаем его "старый" размер. Почему это проблемно? Или ты имеешь ввиду перезапись не средствами самого НС, а "вручную"?
Цитировать
Представь, мы запросили файл, которого нет ни в List1, ни в List2, но он возмжно есть в Last_Access_Times.dat и нам надо перенести его в конец списка, т.к. дата доступа к нему должна измениться!
Или ты предлагаешь пока записать его в List2, а потом позже уже пересчитать Last_Access_Times.dat?
Именно так. Это и есть единственное назначение List2.
Цитировать
Если с нуля, то информация о датах доступа к файлам в Last_Access_Times.dat окажется неверной, т.к. на диске она может сбиваться по разным причинам! Собственно, из-за этого и было предложено ее хранить где-то отдельно!
Тут уж на выбор - либо хранить ее в Last_Access_Times.dat, либо в индексе.
« Последнее редактирование: 09 марта 2007, 13:44:02 от Михаил » Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #42 : 09 марта 2007, 13:45:35 »

Берется старый файл, открывается, его содержимое стирается и заполняется новым. Вот когда файл "берется", мы и узнаем его "старый" размер.
Старый файл не читается - зачем? Он просто замещается новым файлом.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #43 : 09 марта 2007, 13:53:43 »

Старый файл не читается - зачем? Он просто замещается новым файлом.
Но перед этой операцией можно взять из MFT, например, размер файла? Как мы определяем, есть ли файл в кэше? Обращаемся ж к MFT (или FAT).
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #44 : 09 марта 2007, 13:59:58 »

Но перед этой операцией можно взять из MFT, например, размер файла? Как мы определяем, есть ли файл в кэше? Обращаемся ж к MFT (или FAT).

То есть "лишняя" операция с "медленным" диском уже не пугает? А как же "курочка по зернышку..."? Подмигивающий
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #45 : 09 марта 2007, 14:04:55 »

DenZzz
Цитировать
То есть "лишняя" операция с "медленным" диском уже не пугает? А как же "курочка по зернышку..."?
Почему лишняя операция? Мы проверяем наличие файла в кэше и одновременно смотрим его размер. Бывают случаи, когда мы не смотрим предварительно на наличие файла в кэше?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #46 : 09 марта 2007, 15:07:19 »

Почему лишняя операция? Мы проверяем наличие файла в кэше и одновременно смотрим его размер.

Это две разные функции! Проверка наличия файла на диске, судя по URLToCache.pas, осуществляется с помощью быстрой функции GetFileAttributesA, а размер придется запрашивать отдельно функцией GetFileSize.

Цитировать
Бывают случаи, когда мы не смотрим предварительно на наличие файла в кэше?

В HC не знаю - надо у mai62 уточнить... А вообще, да - с помощью функции CreateFile!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #47 : 09 марта 2007, 16:37:48 »

DenZzz
Цитировать
а размер придется запрашивать отдельно функцией GetFileSize.
Сложно, конечно, говорить, т.к. не знаю точно. Но разве нельзя узнавать о несуществовании файла например по коду ошибки, возвращаемой GetFileSize? И не использовать при этом GetFileAttributesA вообще? Только откуда аргумент для GetFileSize брать?
Есть еще такая функция API, как GetFileInformationByHandle. Но опять же, как и в GetFileSize - откуда брать хэндл? Если я правильно понимаю, хэндл присваивается системой уже открытому файлу. Если так, то эти функции нам не подходят, т.к. файл открывать нам не надо.
GetFileAttributesEx более пригодна, т.к. предоставляет и сведения о размере файла. Но она не поддерживает Windows 95. У нас вообще идет речь о поддержке этой ОС?
А может, есть какая-нибудь родная функция Delphi, а не WINAPI, получающая размер файла по его имени и одновременно плюющаяся, если файл не существует?
« Последнее редактирование: 09 марта 2007, 17:23:21 от Михаил » Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #48 : 09 марта 2007, 17:25:48 »

А может, есть какая-нибудь родная функция Delphi, а не WINAPI, получающая размер файла по его имени и одновременно плюющаяся, если файл не существует?
Если и есть, то это просто обертка для нескольких апи вызовов.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #49 : 09 марта 2007, 17:42:22 »

DenZzz
Цитировать
Я говорил о просмотре перед удалением из кэша средствами "Историка", ТotalСommander-а и т.п.
Т.е. файл будет удален из кэша сторонней программой и HC об этом не узнает!
...
Целиком кэш на флешку не всегда влезет - они носят его отдельными каталогами или только самые "свежие" файлы по дате изменения.
Есть в принципе возможность мониторить при помощи FindFirstChangeNotification папку кэша на предмет изменения/удаления входящих в нее файлов и добавления новых. Тогда на ее основе можно вести учет изменения CurrentCacheSize и иных параметров (в т.ч. при перезаписи/изменении файлов самим НС).
Только как быть, когда НС не запущен, а кэш меняют? Тогда пусть действительно после запуска НС давят специальную кнопку и долго ждут.
Но только нужно ли такой огород городить для поддержки желания пользователя менять кэш самостоятельно? Либо лучше взять на вооружение позицию, когда просмотр кэша возможен "вручную", а вот изменение - лишь средствами НС (либо специально поддерживающих совместимость с НС программ).
« Последнее редактирование: 09 марта 2007, 18:28:00 от Михаил » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #50 : 10 марта 2007, 17:59:04 »

Тут уж на выбор - либо хранить ее в Last_Access_Times.dat, либо в индексе.
Лучше хранить дату последнего доступа, видимо, в индексе. В этом случае можно полноценно создать Last_Access_Times.dat с нуля в случае вмешательства пользователя в кэш либо при порче файла. Кроме этого, если максимальный размер кэша не задан либо намного больше текущего, то механизм автоматической очистки можно не включать вообще (т.е. не создавать Last_Access_Times.dat).
Сообщить модератору   Записан
Дем
Постоялец
***

Репутация: +6/-3
Offline Offline

Сообщений: 167



« Ответ #51 : 11 марта 2007, 21:40:31 »

Цитировать
Это две разные функции! Проверка наличия файла на диске, судя по URLToCache.pas, осуществляется с помощью быстрой функции GetFileAttributesA, а размер придется запрашивать отдельно функцией GetFileSize.
На уровне ОС - по первой функции читается сектор с диска, а по второй из этого сектора (уже сидящего в системном кеше) читается размер файла
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #52 : 23 июня 2007, 01:11:01 »

В связи с кардинальной переработкой дефолтных списков самое время, имхо, сделать в очистке давно предложенную галку:
Очистить кэш, используя "Черный список", "Переадресация" и "Преобразование URL", если "Белый список" их не отменяет.
По ходу работы этой опции неплохо б также переносить файлы, подпадающие под новый список  "Преобразование URL", в соответствующие новые папки для дальнейшего прохождения службы.
Сообщить модератору   Записан
po4esal
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 8


« Ответ #53 : 24 марта 2008, 13:14:59 »

Скорее бы реализовали исключения для очистки кэша (( Очень жду!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #54 : 24 марта 2008, 14:23:07 »

Скорее бы реализовали исключения для очистки кэша (( Очень жду!
Это можно делать и сейчас. Дальнейшее справедливо не только в очистке кэша, но и во всех списках, в т.ч. в тех, где колонки "Исключение" нет.
Если нужно задать Правило и Исключение, то набрать так:
^(?!.*Исключение).*Правило
Сообщить модератору   Записан
Alexeyslav
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #55 : 24 марта 2008, 22:51:16 »

Чтобы сильно не мучится, предлагаю сделать отдельную утилиту для очистки кеша, которую например можно назначить в планировщик или запускать при старте системы. И собственно отпадет масса проблем и ограничений.
насчет исключений вида ^(?!.*Исключение).*Правило это хорошо, но есть парочку но:
1. нужно постоянно помнить эту форму - не каждому такое под силу
2. иногда нужно исключать довольно много, эта форма записи под это дело категорически не подходит - можно напутать и опять же - вспоминать все необходимые исключения.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #56 : 24 марта 2008, 23:35:42 »

но есть парочку но
Отправная точка моего поста - просьба
Очень жду!
^(?!.*Исключение).*Правило - это не самая удобная форма записи. Но она есть здесь и сегодня, и ее полезно знать и уметь применять также в списках "Преобразование URL" и "Переадресация". Другие более наглядные формы могут появиться лишь в неопределенном будущем. К тому времени те люди, которые "очень ждут" уже сейчас, давно могут махнуть на НС рукой.
« Последнее редактирование: 24 марта 2008, 23:42:36 от Михаил » Сообщить модератору   Записан
Alexeyslav
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #57 : 24 марта 2008, 23:52:53 »

Вот для этого и предлагаю сделать отдельную утилиту - её не обязательно писать самому разработчику, она может быть и сторонней.
Сообщить модератору   Записан
key939
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 5


« Ответ #58 : 24 мая 2008, 00:15:18 »

Блин надоело ждать когда хоть чтото сделают.
Начал писать прогу для очистки кэша и обработке статистики. Подскажите пожалуйста по каким правилам преобразовываются URL в путь файла кэша.
Хочу чтоб чистка была не только по дате но и по другим параметрам например по количеству обращений к файлу; очень полезный параметр  с помощью него можно узнать какие файлы лежат и не используются(удалить), а какие хоть и созданы давно но часто используются(хранить), какие файлы самые популярные(написать правило), среднее число обращений в неделю, какие приносят максимальную экономию и т.д.
Ой увлёкся извините если написал не туда. Улыбка
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #59 : 24 мая 2008, 10:28:44 »

Начал писать прогу для очистки кэша и обработке статистики.

По обработке статистики есть одна прога: "WrSpy - программа для анализа логов прокси (в т.ч. HandyCache)", только она не делает анализ в разрезе файлов.

Цитировать
Подскажите пожалуйста по каким правилам преобразовываются URL в путь файла кэша.

Посмотри тему: "Алгоритм преобразования URL в имя файла в кэше" - там есть и исходники процедуры преобразования URL, и таблица преобразований.

Цитировать
какие файлы лежат и не используются(удалить), а какие хоть и созданы давно но часто используются(хранить)

HC же умеет чистить по дате использования! Правда, эта дата может сбиваться от работы некоторых программ...
Сообщить модератору   Записан
Страниц: 1 2 [3] 4 5 6   Вверх
  Отправить эту тему    Печать  

 
Перейти в: