WRT MFUndo: its interesting that Slick keeps a before and after copy of the file.
So before saving a modified file, it makes 2 copies?
It doesn't do any "move" operations - I suppose you cannot for several reasons.
Also, it adds entries in VSDelta as well as MFUndo.
A: Couldn't MFUndo make use of the VSDelta instead of creating 2 more copies?
B: Instead of creating individual files in MFUndo, create a ZIP with all the files. You could even disable compression to avoid that overhead. This will reduce the file-operations overhead in Windows quite a bit. I think windows IO isn't so bad in general, but creating files has a lot more overhead than Linux.
C: When copying files to MFUndo, Slick uses a buffer size of "32000" instead of a nice power of two.
Hmm... this is weird.
1st Writing to MFUndo files, Slick goes 32000 bytes at a time. (Alternating reads from original, writes to MFUndo).
2nd, after creating the 1st file in MFUndo, it writes the whole original file using odd sizes: 32765, 32738, 32692, 32745 and finally 8680. (Maybe WriteFileGather() would help out if the buffer it segmented?)
3rd, the original file is written again, this time 8192 bytes at a time. (The file is also open as a buffer).
4th: A VSDelta for this file happens.
5th: The 2nd file in MFUndo is written, 32000 bytes at a time.
6th: The entire original file is read, 8192 bytes at a time.
Seems like there are some unneeded operations there.