Here are three reasons why you might want to make something non-transactional:
- If it’s a smaller (or expensive) part in a larger system that handles undo at a higher level. Each undo record can consume a non-trivial amount of memory, and if you can do undo records of the action (e.g., setting one pixel) instead of invalidating a huge memory buffer then that’s preferable.
- If it’s not actually a user action or user property at all (e.g., when duplicating something during cooking or compilation, or transient flags used for caching/streaming/etc…), and the undo record is just wasted space (this is the most common usage in the engine by far).
- If it’s legacy code that doesn’t handle undoing properly and would otherwise crash (not a great reason, but having undo crash is about the worst user experience possible short of crashing while trying to save…).
Cheers,
Michael Noland