public ValueTableColumn[] LoadCache()
{
Dictionary<ValueTableColumn, ArrayV8> columnValuesByIndex = new Dictionary<ValueTableColumn, ArrayV8>();
for (int i = 0; i < Columns.Count; i++)
{
var col = Columns[i];
try
{
var valueTypes = col.ValueType.Types;
if (valueTypes.Length != 1 || valueTypes[0].Type == TypeEnum.Unknown)
{
continue;
}
}
catch
{
continue;
}
ArrayV8 columnValuesArr = UnloadColumn(col);
columnValuesArr.LoadCache();
columnValuesByIndex[col] = columnValuesArr;
}
if (columnValuesByIndex.Count == 0)
{
return new ValueTableColumn[0];
}
int rowsCount = this.Count;
for (int i = 0; i < rowsCount; i++)
{
ValueTableRow row = (ValueTableRow)GetIndexerFromCache(
i.ToString(),
() => new ValueTableRow(this, i)
);
foreach (KeyValuePair<ValueTableColumn, ArrayV8> pair in columnValuesByIndex)
{
row[pair.Key] = pair.Value[i];
}
}
ValueTableColumn[] cachedColumns = new ValueTableColumn[columnValuesByIndex.Count];
columnValuesByIndex.Keys.CopyTo(cachedColumns, 0);
Array.Sort(cachedColumns, (a, b) => System.Collections.Comparer.DefaultInvariant.Compare(a.Index, b.Index));
return cachedColumns;
}