John,
Currently, Essential Grid visits every cell in the range to be resized, and calls MeasureString to compute exact sizes. If you want to speed things up, I think you will have to either reduce the number of cells being visited, or change the way the size is being computed.
For example, if you know a column has a int in it, then you can easily come up with a max size for that column just by multiplying the average character size times the number of digits of the largest value you expect in the column. So, instead of visiting every cell in the column, you could do a quick calculation to set the column widths. Similarly, if it is a string column, and you know the max characters you expect, then you could calculate the maximum width, and not rely on visiting every cell. In such cases, the resize would be instantaneous.
Or, if you are populating the grid directly, as opposed to binding to an external datassource, you could compute the maxsizes as you loop through the data initially, putting it into the grid. I suspect this is what Excel does to get the speed it has when resizing (as each piece of data is moved into Excel's internal data store, size calculations are done). This would lengthen the initial load, but speed up resizing.
In both these situations, you would replace that calls to ResizeToFit with a call to your own method that uses special knowledge of the data to avoid having to visit every cell.
If you want to tie into Essential Grid's resizing architecture, then you would have to derive from GridTextBoxCellModel and GridTextBoxCellRenderer, and override GridTextBoxCellRenerer.OnQueryPrefferedClientSize and do something other than measuring the string to find its length. When Essential Grid needs the optimal size of a size, it will call this method. It is this method that calls the measurestring as its default implementation.
If you are willing to cut some corners like base the sizing on the same font, then you can speed things up. For example this code in a button handler sized 1000x10 cells between 1-2 seconds.
private void button1_Click(object sender, System.EventArgs e)
{
int ticks = Environment.TickCount;
this.gridControl1.BeginUpdate();
Graphics g = Graphics.FromHwnd(this.gridControl1.Handle);
for(int j = 1; j