Currently, extracted data (i.e. unit options in Bolt 1) is stored in a SQLite database (UnitOptions.db). This had the advantage of being much faster than FullSerializer, but over time we realized it had a major drawback: as a native C++ plugin, sqlite3.dll is prone to permission lock and thread lock errors, because Unity cannot properly guarantee its unloading over assembly reloads.

We will therefore:

Not only will this fix the root cause of many import errors, it will also improve the background loading times. Background Loading (BL) groups all non-crucial preloading operations on the editor side, i.e. operations that do not necessarily be executed in the very first frame. BL happens on a secondary thread and reports its progress via the small progress bar in the bottom right corner of the editor. While BL is only a concern in the editor, and even if it does it is not entirely blocking, it still slows down the game while it is happening (due to operations that have to be executed synchronously with Unity’s main thread) and contributes to the overall feeling of sluggishness.

BL primarily consists of these two operations:

  1. Loading the SQLite Unit Options Database in to memory
  2. Parsing XML Documentation files and storing them in memory

Step 1 will be improved by binary deserialization, while step 2 will be improved with XML documentation pre-parsing (next section).