Das Programm optimiert die SQLite-Datenbanken, aller Profile, des angemeldeten Benutzers.
Warum:
Diese Datenbanken fragmentieren sich durch Lösch- und Update Vorgänge bzw. werden dadurch mit der Zeit auch immer größer.
(in den Datenbanken stehen z.B. die History, Cookies ...)
Problem dadurch:
FireFox startet immer langsamer bzw. wird stellenweise auch immer träger.
Lösung:
Einfach auf jede Datenbank den SQLite-Befehl VACUUM anwenden. Damit wird dieses Datenbank wieder optimiert.
( http://www.sqlite.org/lang_vacuum.html )
Das Ganze basiert auf folgendem Artikel:
http://mozillalinks.org/wp/2009/07/vac…er-performance/
dort sind auch ein paar Messungen zu Speicherplatzverbrauch der Datenbanken und FF-Startzeiten zu sehen.
Das Programm:
Spoiler anzeigen
; ==============================================================================
; Name ..........: FireFox Vacuum
; Description ...: Optimiert die FireFox sqlite Datenbanken aller Profile des angemeldeten Benutzers
; AutoIt Version : V3.3.0.0
; Author(s) .....: Thorsten Willert
; Date ..........: Sun Aug 30 19:08:13 CEST 2009
; ==============================================================================
#include <SQLite.au3>
#include <SQLite.dll.au3>
$aDB = _GetFilesFolder_Rekursiv( @AppDataDir & "\Mozilla\Firefox\Profiles", 'sqlite',0)
If IsArray($aDB) Then
_SQLite_Startup()
For $i = 1 To $aDB[0]
_SQLite_Open($aDB[$i])
If Not @error Then
ConsoleWrite("Optimizing: " & $aDB[$i] & @CRLF)
If $SQLITE_OK <> _SQLite_Exec(-1,"VACUUM") Then _
ConsoleWrite( _SQLite_ErrCode() & @CR & "Error Message: " & _SQLite_ErrMsg() & @CRLF)
_SQLite_Close()
EndIf
Next
_SQLite_Shutdown()
EndIf
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc
Fehlermeldungen durch "gelockte" Datenbanken entstehen, wenn FireFox bei Ausführung dieses Programmes offen ist.
Am besten das Ganze gelegentlich per Taskplaner ausführen (deswegen auch kein GUI, oder MsgBoxen)
Vielen Dank an BugFix für die Funktion _GetFilesFolder_Rekursiv!!!