public static void Save() {
const string tempFileName = Paths.PlayerDBFileName + ".temp";
lock( SaveLoadLocker ) {
PlayerInfo[] listCopy = GetPlayerListCopy();
Stopwatch sw = Stopwatch.StartNew();
using( FileStream fs = new FileStream( tempFileName, FileMode.Create, FileAccess.Write, FileShare.None, 64 * 1024 ) ) {
using( StreamWriter writer = new StreamWriter( fs, System.Text.Encoding.ASCII, 64 * 1024 ) ) {
writer.WriteLine( "{0} {1} {2}", maxID, FormatVersion, Header );
for( int i = 0; i < listCopy.Length; i++ ) {
// TODO: Reuse StringBuilder after switching to 4.0
writer.WriteLine( listCopy[i].Serialize() );
}
}
}
sw.Stop();
Logger.Log( "PlayerDB.Save: Saved player database ({0} records) in {1}ms", LogType.Debug,
Trie.Count, sw.ElapsedMilliseconds );
try {
Paths.MoveOrReplace( tempFileName, Paths.PlayerDBFileName );
} catch( Exception ex ) {
Logger.Log( "PlayerDB.Save: An error occured while trying to save PlayerDB: " + ex, LogType.Error );
}
}
}