Here is why Cutting Styles is much quicker than cutting just text. The part of our code library that you should look at is
\22.214.171.124\Grid\Src\Base\Model\GridModel.cs(6375) which is the gridModel.ClearCells method.
When clearing text only, this code calls GetFormattedText and ApplyFormattedText that gives each cell the opportunity to format what it thinks an empty cell should be. For example, an empty DateTime cell may need to be different than an empty string cell or an empty MyObject cell. Calling these methods trigger multiple events, and this is what is taking the time.
When cutting styles, this problem does not exist as the cell will no longer be a DateTime or any other celltype than the default celltype.
So, how can you work around these methods to make things work faster in your particular situation. If you only want to cut/copy text only, then I probably would handle these tasks myself using the special knowledge of my virtual data source. I suspect you would be able to loop through your virtual datasource and put a delimited Text string on the clipboard in a fraction of the time it would take the grid to do the same thing raising QueryCellInfo events to retrieve the values.
You can handle the grid.ClipboardCopy, Paste and Cut events to do such things in general. Or, in your case, you could do it directly from teh menu handler. To manage clearing the cells, you can handle the ClearingCells event.
To give you an idea of the difference of time required, I modified your sample replacing the Cut with a CustomCopy that just creates a string copy and puts in on the Clipboard. The custom copy takes about a half second on my system, while the grid''s default text copy takes about 20 seconds. The difference is that I accessed the datasource directly and created the string to place on the clipboard, and the grid''s default copy goes the the QueryCellInfo event (and others maybe) to get the values.
As far as QueryCellInfo being raised with e.RowIndex/e.ColIndex = -1, this is again by design. The reason is that any style setting (including possibly Text) that is not explicitly set in the cell style has the chance of being set in the row or column styles (which is what these -1 values are requesting). So, the style inheritance architecture requires the row and column styles be queried when you are retrieving a cell style.