2015-01-21 2 views
3

Я хочу, чтобы сериализовал свой набор данных в JSON.Ускорение JSON Сериализация от C# до JSON

Вот фрагмент кода моего ASMX сериализовать объект

 [WebMethod(EnableSession = true)] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string GetProviderMemberDetail(string jsonString) 
     { 
      BPMember bp = new BPMember(); 
      List<BOProvider> listProvider = bp.GetProviderMemberDetail(jsonString); 
      return ConvertToSerializedJson(listProvider); 
     } 

Вот что ConvertToSerializedJson делает

 public string ConvertToSerializedJson(Object listBO) 
     { 
      string jsonReturn = String.Empty; 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      serializer.MaxJsonLength = Int32.MaxValue; 
      jsonReturn = serializer.Serialize(listBO); 
      return jsonReturn; 
     } 

Количество данных, которые я должен сериализовать много, примерно 200,000 Данные.

Я пробовал этот метод, мой браузер повесился и не ответил, мне нужно подождать 6 минут.

Вторая попытка, я попробовал функцию сериализатора из Newtonsoft.Json, добавил

using Newtonsoft.Json; 

и изменения кода сериализатора с

return JsonConvert.SerializeObject(listProvider); 

Это ускорить немного, но делает мой браузер почти повесить тоже. Для завершения всей сериализации требуется 4 минуты.

Вопрос в том, как я могу ускорить сериализацию? Мой запрос занимает всего 4 секунды, чтобы завершить выполнение запроса и получить данные из БД. Тот, который занимает много времени, - это процесс сериализации. Есть ли какая-нибудь функция, которая будет работать быстрее этого? Пожалуйста, опубликуйте библиотеку имен или функцию и контрольную точку, я обновлю это сообщение, если у меня появятся хорошие существенные изменения.

Cheers.

ОБНОВЛЕНО Вот почему я люблю вас, ребята, у меня есть скорость вверх, с советами от вас добрых-парней, а вот то, что я «твик» немного.

Как сказал @Saravanan, я уменьшил все неиспользованные (или с небольшой частотой) на моем BO. Это была успешная настройка. от 300 секунд (5 минут) до 18 секунд.

Как заявлено @sanguaire, я пытаюсь использовать библиотеку fastJSON (download here), скомпилировать в dll, добавить ссылку на мой проект и эту скорость немного.

Время, необходимое для извлечения 200 000 данных для меня, составляет от 14 секунд до 18 секунд. Это мой ориентир с 17 колонками.

enter image description here

Спасибо за ребят мнения. Извините за задержку с ответом. Я буду (если мои баллы достигнут уровня голосов) проголосуйте за оба ответа.

+0

насколько велик ваш объект bo и он вложен? – Saravanan

+0

@Saravanan У него есть 50 атрибутов, только 'code {get; задавать; } 'для всех членов. Он имеет 50 атрибутов, но в моем случае я использую только 10 атрибутов. Влияет ли атрибут? Так что я сделаю новый BO с меньшим членом, потому что текущий объект члена BO для моей команды использует – WhiteCrow

+0

определенно, это будет иметь влияние ... также, я считаю, что атрибут - это простой тип ... в этом случае это поможет – Saravanan

ответ

2

Вы можете найти хорошую статью о кодировках о разных библиотеках для сериализации JSON (с эталонами).

Вы можете найти его здесь Article about JSON libraries

Bye.

+0

Пожалуйста, напишите главный ответ и его содержащийся, поскольку вы только снабжены ссылками. Знаете ли вы, что решение для публикации со ссылками только не рекомендуется? Я обновлю здесь. – WhiteCrow

+1

Да, я знаю, но эта статья обрабатывает многие библиотеки, и я не хочу повторять статью;) – sanguaire

0

Смотреть это: http://aumcode.github.io/serbench/

Диаграммы (скорость и размер полезной нагрузки):

Типичный Person/одиночный, список [100], список [5000] ... http://aumcode.github.io/serbench/Specimens_Typical_Person-201507121220/web/overview-charts.htm

Entangled объекта График/Конференции/участники/Друзья ... http://aumcode.github.io/serbench/ObjectGraph_Conference-201507121245/web/overview-charts.htm

Сетевой пакетный пакет ... http://aumcode.github.io/serbench/MsgBatching-201507121210/web/overview-charts.htm

У нас также есть тесты EDI X12, еще не опубликованы. Получите инструмент и запустите его так: «sb edi.laconf» он сгенерирует веб-отчет на диске

Смежные вопросы