• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Löschen von Caches extrem langsam

rstweb

Geocacher
Mir ist heute bei der Rev 497 (SVN Rev. 404) aufgefallen, dass das Löschen von Caches aus der DB extrem langsm von statten geht. Ich habe derzeit knapp 1700 Caches in der DB und habe via Filter nach GPX 36 Caches herausgefiltert, die gelöscht werden soll. Dann Über Settings - Data - Maintenance - Remove Caches in selection. Er geht auch schön von 1/36 bis 36/36 durch und dann hängt er Ewigkeiten.
Beim Blick in den Quelltext ist mir aufgefallen, dass er die eigentlichen Löschungen in der DB eigentlich fix durchführt bis er bei Cache 36 von 36 ist und dann führt er ja

Code:
// Fundzahl anpassen
Config.Set("FoundOffset", Config.GetInt("FoundOffset") + numRemovedFoundCaches);
Config.AcceptChanges();

Geocaching.Cache.Query = new List<Cachebox.Geocaching.Cache>();

Global.SelectedCache = null;

finished();

aus. Ich habe mal nach über einer halben Stunde abgebrochen (und dabei Gerät resetten müssen... *grml*) und dann wurde mir angezeigt, dass immer noch 15 Caches, die die Filtereinstellungen erfüllen, vorhanden sind.
Also entweder ist die Statusanzeige fehlerhaft programmiert, oder es wird der SQL-Query erst viel später ausgeführt, was aber nach Quellcode eigentlich nicht sein kann.
Insgesamt verwundert mich die extreme Löschdauer (bin jetzt gesamt bei ca. 1 Stunde) doch sehr.
Habt ihr Ideen, woran es liegen könnte? Achja, habe ein HTC HD2, also eigentlich genügend Rechenleistung ;-)

Vielen Dank schonmal!

Viele Grüße

René
 

MarcLandis

Geocacher
Ich hab es jetzt mal bei mir getestet und es geht schnell. 45 Caches gelöscht in ca. 2 Minuten. Ich habe jetzt trotzdem das Löschen aus der Datenbank in eine SQL-Transaction zusammengefasst.

Ausserdem wurde zum Schluss nochmal der gleiche Filter gesetzt, obwohl ja eigentlich keine Caches mehr da sein sollten. Nun wird im Anschluss der Filter "All Caches" gesetzt.

Gruss,
Marc
 
OP
R

rstweb

Geocacher
MarcLandis schrieb:
Ich schau es mir mal an, aber die Stelle im Code isses eigentlich nicht.
? Die Funktion DeleteFilterSelection erstellt ein neues RemoveArchivedForm und startet es.
RemoveArchivedForm ist in der RemoveTaggedForm.cs definiert. Beim Starten erstellt es einen neuen Prozess, der dann die Funktion threadEntryProc aufruft. Und dort wird jeder einzelne Cache durchgegangen udn alle Infos dazu der Reihe nach gelöscht. In der Schleife wird am Ende auch der Status aktualisiert.
Wenn die Schleife fertig ist, dann kommt der gepostete Code, wobei der eigentlich harmlos ist und keine Fehler verursachen dürfte...
 
OP
R

rstweb

Geocacher
Danke, ich werde gleich mal testen.
ich habe festgestellt, dass scheinbar auf meiner SD-Karte ein kleiner Fehler im Dateisystem war - nicht dass es daran lag. Er formatiert gerade neu und schiebt die Daten wieder rauf. Ich melde mich, sobald ich Ergebnisse habe :)

Viele Grüße

René
 
OP
R

rstweb

Geocacher
Scheinbar war das Problem wirklich der Dateisystemfehler. Es hat mir glattweg auch noch die Datenbank zerschossen. Also erstmal neu erstellen...

Kann ich eigentlich problemlos die heruntergeladenen Map-Titles ins Verzeichnis kopieren und gut ist?
EDIT: Ja, kann man. Einfach den Ordner Cache/Mapnik wieder an die ursprüngliche Stelle kopieren.
 
OP
R

rstweb

Geocacher
Gerade mal knapp 200 Caches gelöscht und es ging wunderbar flott. Wahrscheinlich wirklich das Problem mit dem Dateisystem...

Edit: Es ist die Speicherkarte. Sie verabschiedet sich gerade still und heimlich... grrrr
 
OP
R

rstweb

Geocacher
So, ich habe nun endlich das endgültige Problem gefunden. Es war zwar ein Dateisystemfehler, aber leider durch Cachebox verursacht.
Auslöser war, dass ich die Bilder gegrabbt habe. Bei dem Cache GC1XPEZ ist ein Bild blöd verlinkt (http://t0.gstatic.com/images?q=tbn:2fV8R_SoLJZ8jM:http://www.kirche-leipzig.de/bilder/up/Gemeinden/02_Ev.-Luth._Gem._Leipzig/Sellerhausen_Emmauskirche1.jpg) , so dass beim Laden des Bildes kein ****.jpg rauskommt. Cachebox speichert daraufhin das Bild zwar mit Punkt im Dateinamen, aber ohne Endung ab (bspw. als Dateiname "GC1XPEZ-34894678965760."). Beim Zugriff auf den Bereich kommt es dann in Windows zu Zugriffsproblemen (Windows Mobile und Windows 7), die dann Cachebox abschmieren lassen. Da der Cache gelöscht werden sollte, ist natürlich im Endeffekt dann Windows Mobile beim Löschen festgefahren.

Und nun die Frage, die ich hinsichtlich Sinnhaftigkeit zur Diskussion stellen möchte:
Macht es Sinn, da es ja scheinbar sehr selten vorkommt, in der Speicherroutine beim Grabben der Bilder eine Kontrolle einzubauen, ob es eine Dateiendung gibt und die dann, falls es keine gibt, über den binären Dateiinhalt versucht den Dateityp zu ermitteln? Die gängigsten Grafikformate BMP, JPG, PNG sind ja schon im Header eindeutig zu erkennen.

Viele Grüße

René
 

GeoSilverio

Geowizard
Hmmm, solche Bilder hatte ich auch schon drin.
Ich hatte mich schon gefragt, wie die da rein kommen. Die lassen sich tatsächlich mit normalen Mitteln nicht mehr löschen.
 
OP
R

rstweb

Geocacher
Jupp. Und es kommt dadurch auch beim Laden/Anzeigen von dem Cache zu Problemen. Löschen ist mit Windows nicht möglich. Da hilft nur Linux. Unter Windows ist zum Entfernen der Dateien nur ein Format machbar.
 

GeoSilverio

Geowizard
Na es ging schon irgendwie, ich weiß aber nicht mehr genau, wie ich es geschafft hatte.
Entweder ging komischerweise das Verschieben der Datei (und danach eben löschen)oder erst umbenennen und dann löschen? Ich weiß nicht mehr. Zur Not mit FileLocker oder wie das Tool heißt. Na edenfalls wäre es gut, wenn das gar nicht erst auftritt.
 
OP
R

rstweb

Geocacher
Hm, umbennnen habe ich nicht probiert. Das könnte helfen. Ist aber doof, wenn man halt den Cache in CB löscht und dann das System sich aufhängt, weil es eine Datei nicht löschen kann.
 

hannes!

Geocacher
moin rene,

man kann auch einfach immer .jpg dahinter hängen. die laderoutine von windows mobile erkennt den dateitypen sowieso unabhängig von der endung.

schöne grüße,
hannes!
 

Saturo

Geomaster
Ich habe auch festgestellt, dass das Löschen von Caches extrem langsam von statten geht. Zwischen 10 und 20 Sekunden pro Cache fallen da schon an.

Ist das normal oder liegt es vielleicht an etwas anderem?

Viele Grüße
Christian
 

Saturo

Geomaster
In meinem Fall ging es jetzt deutlich schneller die DB platt zu machen und 2000 Caches neu zu importieren als 400 Caches aus der DB zu löschen.

Christian
 
Oben