The game save the data in OnApplicationPause event. It takes about 2 seconds to sarialize and to save the data. If I kill the game process in a task manager while the data is saving, the save file will be incorrect. And the game progress will be lost.
I save data like this:
public virtual void Save()
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(FileName(), FileMode.OpenOrCreate, FileAccess.Write);
Can I lock the game in a memory while the data is saving? Or can I save data faster?
You will want to add your save to OnApplicationQuit, as for speed, it’s not clear what you’re parsing out/serializing to disk/storage. If the host system, regardless of Windows/osx/etc, if the ability to terminate an application is used it’s typically not graceful and the host system literally just kills the process. You might find serializing to Json(depending on the implementation) faster. The only thing you can do is test it as it applies to your objects you’re serializing and mileage will vary. The System.Diagnostics namespace has a stopwatch class. Use this to start the stopwatch before you serialize and stop. Check the elapsed time and output it to the console through Debug.Log. Do this for different serialization types if applicable to your objects.
You have two ways (I think):
- Save your game data in separate files, so you can save chunks of data (that should be faster) just when you need to save, not only when closing the application.
- Add a loader screen when saving your huge file until it ends, requesting the player to “Do not switch off”, so if it fails is not your fault.