Костыльный вариант не подскажете? Ну кроме переустанавливать всю папку.Очистка кеша сломана для профиль-папок в ZP7.
Вручную удалять файлы содержащие кеш.Костыльный вариант не подскажете? Ну кроме переустанавливать всю папку.
Там туча файлов и папок. Которые из них для Chromium?Вручную удалять файлы содержащие кеш
bool REDUCE_PROFILE_SIZE = true;
if(REDUCE_PROFILE_SIZE) {
string bad_dir = $@"{profilePatch}\Default\Service Worker\CacheStorage";
string[] files = Directory.GetFiles(bad_dir);
string[] subDirectories = Directory.GetDirectories(bad_dir);
foreach(string file in files)
{
File.Delete(file);
}
foreach(string directory in subDirectories)
{
Directory.Delete(directory, true);
}
}
--disk-cache-size=52428800 --media-cache-size=52428800
Можно чуть улучшить и попробовать использовать переменную окружения:Вот мое решение, которое позволило мне сократить размер профиль папок с 600mb+ до 700kb+
Почти в 900 раз.
Первое, это удаление папки '...\Default\Service Worker\CacheStorage'
Удаление папки '...\Default\Service Worker\CacheStorage' приведет к очистке кэшированных данных веб-сайтов, включая возможно кэшированные данные сервис-воркеров.
Второе, запуск chrome с флагами:C#:bool REDUCE_PROFILE_SIZE = true; if(REDUCE_PROFILE_SIZE) { string bad_dir = $@"{profilePatch}\Default\Service Worker\CacheStorage"; string[] files = Directory.GetFiles(bad_dir); string[] subDirectories = Directory.GetDirectories(bad_dir); foreach(string file in files) { File.Delete(file); } foreach(string directory in subDirectories) { Directory.Delete(directory, true); } }
--disk-cache-size=52428800 --media-cache-size=52428800
Это уменьшает размер максимального кеша.
PS. Все куки, и LocalStorage остаются на месте, авторизации не слетают.
bool REDUCE_PROFILE_SIZE = true;
if(REDUCE_PROFILE_SIZE) {
var browserProfileFolder = project.BrowserProfileFolder;
if (string.IsNullOrEmpty(browserProfileFolder)) return "";
string bad_dir = Path.Combine(browserProfileFolder, $@"\Default\Service Worker\CacheStorage");
string[] files = Directory.GetFiles(bad_dir);
string[] subDirectories = Directory.GetDirectories(bad_dir);
foreach(string file in files)
{
File.Delete(file);
}
foreach(string directory in subDirectories)
{
Directory.Delete(directory, true);
}
}
а можно чуть подробнее - что куда добавить, как использовать? к слову тянет на статью в конкурс - "кейс, как сэкономил на покупке железа")Можно чуть улучшить и попробовать использовать переменную окружения:
C#:bool REDUCE_PROFILE_SIZE = true; if(REDUCE_PROFILE_SIZE) { var browserProfileFolder = project.BrowserProfileFolder; if (string.IsNullOrEmpty(browserProfileFolder)) return ""; string bad_dir = Path.Combine(browserProfileFolder, $@"\Default\Service Worker\CacheStorage"); string[] files = Directory.GetFiles(bad_dir); string[] subDirectories = Directory.GetDirectories(bad_dir); foreach(string file in files) { File.Delete(file); } foreach(string directory in subDirectories) { Directory.Delete(directory, true); } }
Так и так же все понятно.а можно чуть подробнее - что куда добавить, как использовать? к слову тянет на статью в конкурс - "кейс, как сэкономил на покупке железа")
string profilePatch = $@"путь до вашей папки с профилем"; // например D:/Profiles/Profile_1
bool REDUCE_PROFILE_SIZE = true;
if(REDUCE_PROFILE_SIZE) {
string bad_dir = $@"{profilePatch}\Default\Service Worker\CacheStorage";
string[] files = Directory.GetFiles(bad_dir);
string[] subDirectories = Directory.GetDirectories(bad_dir);
foreach(string file in files)
{
File.Delete(file);
}
foreach(string directory in subDirectories)
{
Directory.Delete(directory, true);
}
}
[ваши блоки в шаблоне]
[мой код уменьшения размера папки профиля]
[запуск инстанса с профиль папкой]
[ваши блоки в шаблоне]
Я бы не советовал так делать.Можно чуть улучшить и попробовать использовать переменную окружения:
C#:bool REDUCE_PROFILE_SIZE = true; if(REDUCE_PROFILE_SIZE) { var browserProfileFolder = project.BrowserProfileFolder; if (string.IsNullOrEmpty(browserProfileFolder)) return ""; string bad_dir = Path.Combine(browserProfileFolder, $@"\Default\Service Worker\CacheStorage"); string[] files = Directory.GetFiles(bad_dir); string[] subDirectories = Directory.GetDirectories(bad_dir); foreach(string file in files) { File.Delete(file); } foreach(string directory in subDirectories) { Directory.Delete(directory, true); } }
в вашей посте - все понятно, спасибо)Так и так же все понятно.
Попробую объяснить проще.
А не больше смысла в конце перед завершением работы шаблона чистить (ну или и перед запуском, и в конце)? Чтобы не хранить все набежавшее за сессию на диске? Смысл-то именно в хранении, в общем, что в процессе набежит, оно только в процессе и будет место занимать.В своем шаблоне перед запуском инстанса вы запускаете мой код, предварительно присвоив переменной 'profilePatch' путь до вашего профиля который вы будете запускать
Я писал об этом здесьА не больше смысла в конце перед завершением работы шаблона чистить (ну или и перед запуском, и в конце)? Чтобы не хранить все набежавшее за сессию на диске? Смысл-то именно в хранении, в общем, что в процессе набежит, оно только в процессе и будет место занимать.
Я бы не советовал так делать.
Ты предлагаешь чистить профиль когда он загружен уже инстансом, т.е. работать по живому профилю, это может вызвать проблемы с профилем при следующей загрузке.
Лучше как у меня, когда профиль не загружен, ты его чистишь а потом загружаешь.
Ну, я имел ввиду все-таки не в процессе, а в конце работы, иначе немного теряется смысл, ибо придется все равно хранить все набежавшее за сессию.Я писал об этом здесь
Есть ли новости по данному вопросу? Критическому багу 3.5 года, как же так, что нет официального решения вопроса? Как вообще работать с профиль-папками, если размер профилей будет расти по экспоненте.Пока ещё в процессе разработки.
Поддержу вопросЕсть ли новости по данному вопросу? Критическому багу 3.5 года, как же так, что нет официального решения вопроса? Как вообще работать с профиль-папками, если размер профилей будет расти по экспоненте.
Есть ли новости по данному вопросу? Критическому багу 3.5 года, как же так, что нет официального решения вопроса? Как вообще работать с профиль-папками, если размер профилей будет расти по экспоненте.
Есть встроенный механизм ограничения размера профилей, можно прописать вПоддержу вопрос
C:\Users\<Username>\AppData\Roaming\ZennoLab\ZennoPoster\7\Settings\globalsettings.settings.json
(там должно быть такое, нужно только добавить StorageQuotaSettings:PoolSizeBytes/n
, где n - размер в байтах):{
"clnMainGroup": "ZennoPoster",
"clnSubGroup": "Chrome",
"clnName": "EnableFeatures",
"clnType": "System.String",
"clnValue": "RunVideoCaptureServiceInBrowserProcess,StorageQuotaSettings:PoolSizeBytes/524288000"
},
StorageQuotaSettings:PoolSizeBytes/524288000
- это будет приблизительным ограничением пула/профиля, в байтах, что соответствует 500 Мб. Соответственно, можно настроить по желанию.--disk-cache-size=524288000 --media-cache-size=524288000
Вот мое решение, которое позволило мне сократить размер профиль папок с 600mb+ до 700kb+
Почти в 900 раз.
Первое, это удаление папки '...\Default\Service Worker\CacheStorage'
Удаление папки '...\Default\Service Worker\CacheStorage' приведет к очистке кэшированных данных веб-сайтов, включая возможно кэшированные данные сервис-воркеров.
Второе, запуск chrome с флагами:C#:bool REDUCE_PROFILE_SIZE = true; if(REDUCE_PROFILE_SIZE) { string bad_dir = $@"{profilePatch}\Default\Service Worker\CacheStorage"; string[] files = Directory.GetFiles(bad_dir); string[] subDirectories = Directory.GetDirectories(bad_dir); foreach(string file in files) { File.Delete(file); } foreach(string directory in subDirectories) { Directory.Delete(directory, true); } }
--disk-cache-size=52428800 --media-cache-size=52428800
Это уменьшает размер максимального кеша.
PS. Все куки, и LocalStorage остаются на месте, авторизации не слетают.
Добрый вечер, как ведут себя профили после чистки кэша? Свою "нагуляность" сохраняют?Вот мое решение, которое позволило мне сократить размер профиль папок с 600mb+ до 700kb+
Почти в 900 раз.
Первое, это удаление папки '...\Default\Service Worker\CacheStorage'
Удаление папки '...\Default\Service Worker\CacheStorage' приведет к очистке кэшированных данных веб-сайтов, включая возможно кэшированные данные сервис-воркеров.
Второе, запуск chrome с флагами:C#:bool REDUCE_PROFILE_SIZE = true; if(REDUCE_PROFILE_SIZE) { string bad_dir = $@"{profilePatch}\Default\Service Worker\CacheStorage"; string[] files = Directory.GetFiles(bad_dir); string[] subDirectories = Directory.GetDirectories(bad_dir); foreach(string file in files) { File.Delete(file); } foreach(string directory in subDirectories) { Directory.Delete(directory, true); } }
--disk-cache-size=52428800 --media-cache-size=52428800
Это уменьшает размер максимального кеша.
PS. Все куки, и LocalStorage остаются на месте, авторизации не слетают.
bool REDUCE_PROFILE_SIZE = true;
if (REDUCE_PROFILE_SIZE)
{
// Ожидание завершения работы браузера (если нужно)
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер
System.Threading.Thread.Sleep(6000); // Задержка 6 секунд
// Получаем путь к профилю
string profilePath = Path.Combine(project.Directory, "Profile", project.Profile.Login);
// Список папок для очистки с пояснениями
string[] foldersToClean = new string[]
{
Path.Combine(profilePath, "Default", "AutofillStrikeDatabase"), // База данных для автозаполнения форм
Path.Combine(profilePath, "Default", "blob_storage"), // Хранилище бинарных объектов
Path.Combine(profilePath, "Default", "Cache"), // Кэш браузера (можно безопасно очистить)
Path.Combine(profilePath, "Default", "Code Cache"), // Кэш для скриптов и кода
Path.Combine(profilePath, "Default", "Download Service"), // Временные файлы для загрузок
Path.Combine(profilePath, "Default", "Extension Rules"), // Правила расширений
Path.Combine(profilePath, "Default", "Extension Scripts"), // Скрипты расширений
Path.Combine(profilePath, "Default", "Extension State"), // Состояние расширений
Path.Combine(profilePath, "Default", "Local Storage"), // Локальное хранилище данных, можно очистить
Path.Combine(profilePath, "Default", "Network"), // Временные данные сети
Path.Combine(profilePath, "Default", "optimization_guide_hint_cache_store"), // Кэш подсказок для оптимизации
Path.Combine(profilePath, "Default", "parcel_tracking_db"), // База данных для отслеживания посылок
Path.Combine(profilePath, "Default", "PersistentOriginTrials"), // Данные о персистентных испытаниях
Path.Combine(profilePath, "Default", "Safe Browsing Network"), // Кэш безопасного серфинга
Path.Combine(profilePath, "Default", "Segmentation Platform"), // Данные платформы сегментации
Path.Combine(profilePath, "Default", "Session Storage"), // Хранилище сессий
Path.Combine(profilePath, "Default", "Sessions"), // Сессии
Path.Combine(profilePath, "Default", "Shared Dictionary"), // Общий словарь
Path.Combine(profilePath, "Default", "shared_proto_db"), // Общая база данных протоколов
Path.Combine(profilePath, "Default", "Sync Data") // Данные синхронизации (можно очистить, но повлияет на синхронизацию)
};
// Очистка кеша и временных данных
foreach (var folder in foldersToClean)
{
if (Directory.Exists(folder))
{
string[] files = Directory.GetFiles(folder);
string[] subDirectories = Directory.GetDirectories(folder);
// Удаляем все файлы в папке
foreach (string file in files)
{
try
{
File.Delete(file);
}
catch (Exception ex)
{
project.SendInfoToLog($"Ошибка при удалении файла {file}: {ex.Message}");
}
}
// Удаляем все подкаталоги в папке
foreach (string directory in subDirectories)
{
try
{
Directory.Delete(directory, true); // true - для удаления с содержимым
}
catch (Exception ex)
{
project.SendInfoToLog($"Ошибка при удалении каталога {directory}: {ex.Message}");
}
}
}
else
{
project.SendInfoToLog($"Папка не найдена: {folder}");
}
}
}
Project/Profile/{-Profile.Login-}
Добрый вечер, по вашему опыту какие категории файлов весят больше всего? Хотя бы в процентном соотношении, чтобы знать что можно сразу удалить. СпасибоМожет кому пригодится. профили "projectData/Profile" должны быть. кому логика не понятна, спросите. опишу. сейчас лень.
Лишнее удалите под себя
PS. Берет профиль папку по текущему логину. те профиль папка должна называтся как и логин.C#:bool REDUCE_PROFILE_SIZE = true; if (REDUCE_PROFILE_SIZE) { // Ожидание завершения работы браузера (если нужно) instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер System.Threading.Thread.Sleep(6000); // Задержка 6 секунд // Получаем путь к профилю string profilePath = Path.Combine(project.Directory, "Profile", project.Profile.Login); // Список папок для очистки с пояснениями string[] foldersToClean = new string[] { Path.Combine(profilePath, "Default", "AutofillStrikeDatabase"), // База данных для автозаполнения форм Path.Combine(profilePath, "Default", "blob_storage"), // Хранилище бинарных объектов Path.Combine(profilePath, "Default", "Cache"), // Кэш браузера (можно безопасно очистить) Path.Combine(profilePath, "Default", "Code Cache"), // Кэш для скриптов и кода Path.Combine(profilePath, "Default", "Download Service"), // Временные файлы для загрузок Path.Combine(profilePath, "Default", "Extension Rules"), // Правила расширений Path.Combine(profilePath, "Default", "Extension Scripts"), // Скрипты расширений Path.Combine(profilePath, "Default", "Extension State"), // Состояние расширений Path.Combine(profilePath, "Default", "Local Storage"), // Локальное хранилище данных, можно очистить Path.Combine(profilePath, "Default", "Network"), // Временные данные сети Path.Combine(profilePath, "Default", "optimization_guide_hint_cache_store"), // Кэш подсказок для оптимизации Path.Combine(profilePath, "Default", "parcel_tracking_db"), // База данных для отслеживания посылок Path.Combine(profilePath, "Default", "PersistentOriginTrials"), // Данные о персистентных испытаниях Path.Combine(profilePath, "Default", "Safe Browsing Network"), // Кэш безопасного серфинга Path.Combine(profilePath, "Default", "Segmentation Platform"), // Данные платформы сегментации Path.Combine(profilePath, "Default", "Session Storage"), // Хранилище сессий Path.Combine(profilePath, "Default", "Sessions"), // Сессии Path.Combine(profilePath, "Default", "Shared Dictionary"), // Общий словарь Path.Combine(profilePath, "Default", "shared_proto_db"), // Общая база данных протоколов Path.Combine(profilePath, "Default", "Sync Data") // Данные синхронизации (можно очистить, но повлияет на синхронизацию) }; // Очистка кеша и временных данных foreach (var folder in foldersToClean) { if (Directory.Exists(folder)) { string[] files = Directory.GetFiles(folder); string[] subDirectories = Directory.GetDirectories(folder); // Удаляем все файлы в папке foreach (string file in files) { try { File.Delete(file); } catch (Exception ex) { project.SendInfoToLog($"Ошибка при удалении файла {file}: {ex.Message}"); } } // Удаляем все подкаталоги в папке foreach (string directory in subDirectories) { try { Directory.Delete(directory, true); // true - для удаления с содержимым } catch (Exception ex) { project.SendInfoToLog($"Ошибка при удалении каталога {directory}: {ex.Message}"); } } } else { project.SendInfoToLog($"Папка не найдена: {folder}"); } } }
C#:Project/Profile/{-Profile.Login-}
Добрый вечер, по вашему опыту какие категории файлов весят больше всего? Хотя бы в процентном соотношении, чтобы знать что можно сразу удалить. Спасибо
Path.Combine(profilePath, "Default", "Cache"),
Path.Combine(profilePath, "Default", "Code Cache"),
Path.Combine(profilePath, "Default", "Local Storage"),
Path.Combine(profilePath, "Default", "Session Storage")
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.Firefox52, true); // Запустить браузер Firefox52
bool REDUCE_PROFILE_SIZE = true;
if (REDUCE_PROFILE_SIZE)
{
// Выключаем браузер и запускаем новый для прерывания текущего процесса
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер
instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.Firefox52x64, true); // Запустить браузер Firefox52х64
// получаем профиль для очистки
string profilePath = Path.Combine(project.Directory, "Profile", project.Profile.Login);
// Список папок для очистки
string[] foldersToClean = new string[]
{
Path.Combine(profilePath, "Default", "Cache"),
Path.Combine(profilePath, "Default", "Code Cache"),
Path.Combine(profilePath, "Default", "Download Service"),
Path.Combine(profilePath, "Default", "Local Storage"),
Path.Combine(profilePath, "Default", "Session Storage")
};
// Очистка папок
foreach (var folder in foldersToClean)
{
if (Directory.Exists(folder))
{
foreach (var file in Directory.GetFiles(folder))
{
try
{
File.Delete(file);
project.SendInfoToLog($"Удалён файл: {file}");
}
catch (Exception ex)
{
project.SendInfoToLog($"Ошибка при удалении файла {file}: {ex.Message}");
}
}
foreach (var directory in Directory.GetDirectories(folder))
{
try
{
Directory.Delete(directory, true);
project.SendInfoToLog($"Удалён каталог: {directory}");
}
catch (Exception ex)
{
project.SendInfoToLog($"Ошибка при удалении каталога {directory}: {ex.Message}");
}
}
}
else
{
project.SendInfoToLog($"Папка не найдена: {folder}");
}
}
}
Для CEF этот код можно использовать?короче, вот рабочий вараинт для хромиум:
C#:bool REDUCE_PROFILE_SIZE = true; if (REDUCE_PROFILE_SIZE) { // Выключаем браузер и запускаем новый для прерывания текущего процесса instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.WithoutBrowser, true); // Выключить браузер instance.Launch(InterfacesLibrary.Enums.Browser.BrowserType.Firefox52x64, true); // Запустить браузер Firefox52х64 // получаем профиль для очистки string profilePath = Path.Combine(project.Directory, "Profile", project.Profile.Login); // Список папок для очистки string[] foldersToClean = new string[] { Path.Combine(profilePath, "Default", "Cache"), Path.Combine(profilePath, "Default", "Code Cache"), Path.Combine(profilePath, "Default", "Download Service"), Path.Combine(profilePath, "Default", "Local Storage"), Path.Combine(profilePath, "Default", "Session Storage") }; // Очистка папок foreach (var folder in foldersToClean) { if (Directory.Exists(folder)) { foreach (var file in Directory.GetFiles(folder)) { try { File.Delete(file); project.SendInfoToLog($"Удалён файл: {file}"); } catch (Exception ex) { project.SendInfoToLog($"Ошибка при удалении файла {file}: {ex.Message}"); } } foreach (var directory in Directory.GetDirectories(folder)) { try { Directory.Delete(directory, true); project.SendInfoToLog($"Удалён каталог: {directory}"); } catch (Exception ex) { project.SendInfoToLog($"Ошибка при удалении каталога {directory}: {ex.Message}"); } } } else { project.SendInfoToLog($"Папка не найдена: {folder}"); } } }
куки, нагуленость и что влияет на детект итд. не удаляется. Удаляются только временный кеш.
там написана выше для какого браузера онДля CEF этот код можно использовать?
если нужно, сделаю для хромаДля CEF этот код можно использовать?
Благодарю, да я увидел что для хромиума, поэтому и спросил) Можно пожалуйста для движка CEF сделать адаптацию кода, я думаю тут многим это будет полезно, я давно наблюдаю за этой темой и тяжко идет в общем понимание, так и не решил проблему с пухнущими папкамиесли нужно, сделаю для хрома
У тебя профили по какому пути?Благодарю, да я увидел что для хромиума, поэтому и спросил) Можно пожалуйста для движка CEF сделать адаптацию кода, я думаю тут многим это будет полезно, я давно наблюдаю за этой темой и тяжко идет в общем понимание, так и не решил проблему с пухнущими папками
Да, именно такая структура - проект/profile (в нем папки с профилями)У тебя профили по какому пути?
/папка проекта/Profile/{-Profile.Login-}
сойдет?
у меня имена профилей соответсвет их логинуДа, именно такая структура - проект/profile (в нем папки с профилями)
{-Profile.Login-} - а вот это что означает в пути?