Некоторые базовые тесты показывают, что сериализация в JSON с использованием JavaScriptSerializer занимает в два раза больше времени для анонимных типов, чем для аналогичного вида неанонимного типа.
Пример кода:
namespace ConsoleTestApp
{
public class Program
{
protected class Sample
{
private static int count = 0;
public bool Alpha;
public int Beta;
public string Gamma = String.Format("count: {0}", count++);
}
public static void Main(string[] args)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
int count = 100000;
for (int i = 0; i < count; i++)
{
Sample sample = new Sample();
string result = serializer.Serialize(sample);
}
for (int i = 0; i < count; i++)
{
var anon = new { Alpha = true, Beta = 1, Gamma = String.Format("count: {0}", count) };
string anonResult = serializer.Serialize(anon);
}
}
}
}
Результат с использованием встроенного профилировщика в VS2010 (редакция Premium):

КогдаЯ впервые заметил это, подумал: «Конечно, потому что это анонимно, и сериализатор должен проверить это, чтобы знать, что сериализировать».Но эта внутренняя реакция казалась неправильной после того, как я на мгновение подумал, что анонимный тип все еще статически типизирован для компилятора, он просто анонимный.Таким образом, гипотетически сериализатор имеет столько же информации об анонимном типе, сколько и неанонимный тип.Или это неверно?(Или, как вариант, мой вышеописанный тест некорректен?)