I probably can. I am actually doing this all from ClojureScript primarily calling cesium via javascript interop, but I started off going the CZML route and generating it at runtime from some input (the learning path I happened to fall on from the existing demos). I should be able to just emit the CZML and hang it somewhere and refer to it from sandcastle, although I’m doing stuff with multiple views that requires a little syncing (I think that’s feasible though; just means I have to revert to JS, hopefully it’s minimal).
FWIW I did end up mocking up some caching using PolylineCollection(s) of the static geometry, sort of an offline cache derived from the entity collections. I replace all the of “static” line instances (instances that show up after a movement is completed, part of the accumulated set of polylines showing density), and removed the corresponding entities from the collection. Then I have a range tree of all the time intervals for availability to determine which static lines are visible at any point (to support dynamic fast forward, rewind), and use that to toggle visibility on the cached polylines in the PolylineCollection (also using some relatively efficient set intersections to compare the currently visible lineset to the proposed, so not doing naive availability queries every frame).
Seems to work in principle, but did not solve my performance woes (perhaps in isolation it would be useful).