Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-11-2009, 08:21   #1
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
[C#] Sincronizzare il contenuto di una cartella con quello di un archivio ZIP

Ciao a tutti!
Ieri sera ho scritto una classe per realizzare il backup incrementale di una cartella in formato ZIP (utilizzando l'ottimo DotNetZip di Dino Chiesa ( )), solo che sono rimasto abbastanza deluso dalle prestazioni di ciò che ho fatto.

In particolare, usando la cartella del profilo di Thunderbird come test (la mia "pesa" circa 650MB e contiene circa 6500 files e poco più di 80 cartelle totali), il primo backup completo (del peso finale di 340MB) è realizzato in 3 minuti e 23 secondi (e questo dimostra la bontà della libreria DotNetZip, con prestazioni paragonabili ai più noti ZIP engine), mentre i backup successivi, quindi del tipo incrementale, sono completati in circa 2 minuti e 35 secondi per un peso di circa 160MB ciascuno (questo perché basta ricevere solo un'email e Thuderbird modifica il file Inbox del relativo account e quindi va segnato per il backup (in genere è un file piuttosto grande).

Bene. Mi sono accorto che durante i backup incrementali, la mia classe perde ben 1 minuto e 17 secondi per determinare (attraverso un ciclo foreach) quali sono i file da includere nel nuovo file ZIP. Ed è qui che, secondo me, perde davvero troppo tempo.

Ecco il mio codice, che poi non è nulla di che, ovviamente.

Codice:
using (ZipFile NewZip = new ZipFile())
{
ZipFile OldZip = ZipFile.Read(nameOfZipFile) NewZip.UseZip64WhenSaving = Zip64Option.AsNecessary; NewZip.CompressionLevel = CompressionLevel.Level2; NewZip.UseUnicodeAsNecessary = true; foreach (FileInfo currentFileOnDisk in FileList) {
ZipEntry candidateZipEntry = OldZip[currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile")]; if (candidateZipEntry != null && currentFileOnDisk.LastWriteTimeUtc > candidateZipEntry.ModifiedTime) NewZip.AddFile(currentFileOnDisk.FullName, Path.GetDirectoryName(currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile"))); else if (candidateZipEntry == null) NewZip.AddFile(currentFileOnDisk.FullName, Path.GetDirectoryName(currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile")));
} NewZip.Save(nameOfZipFile+incrementalCounter.ToString());
}
Secondo voi sbaglio qualcosa? come si potrebbe fare di meglio?

P.S: la classe non è ovviamente completa, manca in particolare il controllo di eventuali file eliminati nella cartella origine, che dovrei realizzare con un altro ciclo foreach, e quindi immagino che perderà un altro minuto per il controllo
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)
alex783 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 07:41   #2
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
ehm... nessuno?
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)
alex783 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 10:48   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Potrei dire una cavolata, ma potresti eseguire l'operazione qui sotto solo una volta, invece che ripeterla 2 volte:
- durante l'assegnazione iniziale di ZipEntry;
- nel ramo di esecuzione scelto.
Codice:
currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile")
poi potresti scrivere la condizione dell'if così:
Codice:
foreach (FileInfo currentFileOnDisk in FileList)
{
    String fileName = currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile");
    ZipEntry candidateZipEntry = OldZip[fileName];

    if (candidateZipEntry == null || currentFileOnDisk.LastWriteTimeUtc > candidateZipEntry.ModifiedTime) 
        NewZip.AddFile(currentFileOnDisk.FullName, Path.GetDirectoryName(fileName));
}
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 03-11-2009 alle 11:30.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 14:47   #4
theking0
Member
 
L'Avatar di theking0
 
Iscritto dal: Jul 2007
Messaggi: 45
La migliore lib per il formatto zip è SharpZipLib.

Prova con quella.
theking0 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 17:07   #5
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Potrei dire una cavolata, ma potresti eseguire l'operazione qui sotto solo una volta, invece che ripeterla 2 volte:
- durante l'assegnazione iniziale di ZipEntry;
- nel ramo di esecuzione scelto.
Codice:
currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile")
poi potresti scrivere la condizione dell'if così:
Codice:
foreach (FileInfo currentFileOnDisk in FileList)
{
    String fileName = currentFileOnDisk.FullName.Replace(mailclientsClass.thunderbirdProfilePath, "ThunderbirdProfile");
    ZipEntry candidateZipEntry = OldZip[fileName];

    if (candidateZipEntry == null || currentFileOnDisk.LastWriteTimeUtc > candidateZipEntry.ModifiedTime) 
        NewZip.AddFile(currentFileOnDisk.FullName, Path.GetDirectoryName(fileName));
}
Sì, in effetti la condizione di "if" è meglio come hai detto tu.
Thanks!

Quote:
Originariamente inviato da theking0 Guarda i messaggi
La migliore lib per il formatto zip è SharpZipLib.

Prova con quella.
Uhm, perché è meglio? DotNetZip è un progetto in continuo sviluppo, il manteiner rilascia nuove versione molto frequentemente e la documentazione è ottima.

Inoltre, la versione 1.9 promette grandi passi avanti nelle prestazioni (che già sono assai decorose, comunque) con la compressione e decompressione in parallelo ( http://dotnetzip.codeplex.com/WorkIt...orkItemId=5183 )
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)
alex783 è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2009, 09:46   #6
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
Dino Chiesa ha rilasciato una nuova release della versione beta di DotNetZip (la 1.9.0.29).

Dire "eccezionale" sarebbe riduttivo

Con la compressione in parallelo e il BufferSize impostato a 131072 (ovvero 128KB), il mio programma ha ridotto i tempi di compressione di circa l'80%.

Per comprimere la stessa cartella del profilo di Thunderbird, ora impiega appena 1 minuto e 52 secondi (con la vecchia versione della libreria, e senza il BufferSize impostato a 128KB, impiegava circa 3 minuti e 23 secondi).

E devo ancora provare gli altri consigli che mi ha dato!

Provatela anche voi! http://dotnetzip.codeplex.com/Releas...eleaseId=27890
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)
alex783 è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2009, 09:49   #7
alex783
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 609
Inoltre, stavo pensando anche di impiegare un db come SQLite per creare un catalogo che tenga traccia degli ultimi file modificati, così non ho bisogno di controllare ogni file ZIP. Non vedo l'ora di provare tutte queste modifiche...
__________________
L'iPad? Potrebbe esserci gente che, pur d'avere il nuovo gadget, si mette a leggere i libri. Questa sì sarebbe una rivoluzione (Beppe Severgnini)
alex783 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
HONOR Win2 si mostra online: potenza da ...
Clamoroso dietrofront di Sony: cancellat...
GeForce NOW, tante novità con l'u...
Il mercato smartphone rallenta nel Q3 20...
Addio al Valve Index: fine della produzi...
Seggiolini auto i-Size da 0 a 12 anni in...
Amazon determina i prezzi di tutto il we...
Robot aspirapolvere ECOVACS in offerta s...
Bodywel F20PRO o DEEPOWER A5? Due fat bi...
Gli agenti AI non diventano pazzi, sono ...
Kenwood Chef XL 6,7L a 239€ su Amazon: u...
Sconto al check-out a sorpresa: Smart TV...
Prima guida con GAC Aion V: interni prem...
Gli investitori frenano su Anthropic: IP...
Il meglio di Amazon in 10 articoli: 1, 2...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v