Hi Andrey. Regarding your questions:
Buffering discards any nested non-scalar values (tables, lists, records, etc.) and converts them into text values such as "[Table]", "[List]", "[Record]", etc. Question 1.2: The way cells of a table are calculated depends on the table. But buffering a table will definitely force any "lazy" cells or rows to be calculated immediately, resulting in non-lazy values in the buffered version of the table.CORRECTED ANSWER: Buffering is shallow. It will force the evaluation of any scalar cell values, but will leave non-scalar values (records, lists, tables, etc.) as-is.- The behavior you describe (automatically storing buffered values on disk and removing them from memory) is not part of how our system works AFAIK. If you buffer a bunch of large tables that are all being actively referenced, you can end up getting an out-of-memory error.
- Once a buffered value is no longer referenced, it will be garbage collected by .NET. But this depends on what you're doing with the buffered value, and whether the references to it treat it as a lazy value to be accessed as-needed, or as something to be accessed immediately and then discarded.
EDIT: Curt pointed out my previous answer to #1 was incorrect. I've corrected it above. (The previous answer describes what happens when the Data Privacy Firewall buffers data, not what Table.Buffer does all by itself.)
Ehren