У меня есть большой набор данных (IEnumerable
из [Table]
-атрибутированных объектов класса) из запроса Linq-To-Sql, и мне нужно создать из него файл CSV. Я перебираю набор данных и для каждого элемента преобразую значение каждого свойства элемента в строку, используя различные параметры форматирования.
Type t = typeof(T);
var properties = t.GetProperties();
foreach (var item in list)
{
foreach (var property in properties)
{
// This is made using delegates, but whatever
object value = property.GetValue(item, null);
// convert to string and feed to StringBuilder
}
}
Проблема в том, что преобразование занимает даже больше времени, чем выполнение запроса. Набор данных содержит сильно денормализованные данные — многие элементы имеют одни и те же свойства, имеющие одинаковые значения, и только некоторые свойства имеют разные значения. Каждое значение свойства переводится отдельно для каждого элемента в наборе данных. Поэтому мой код преобразует одни и те же данные в одни и те же строки — снова и снова. И хотелось бы как-то это ускорить, желательно без изменения SQL-запроса.
Как использовать MemoryCache
, чтобы кэшировать результаты перевода для объектов разных типов?