Сериализация BinaryFormatter в разное время для разных классовC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Сериализация BinaryFormatter в разное время для разных классов

Сообщение Гость »


Я использую BinaryFormatter для отправки различных типов сообщений через TCP.

Я использую следующий код для передачи производного класса MessageBase:

private void TransmittingThread() { log.Debug("TCPCommunicationLayer - Запуск TransmittingThread"); пока (IsRunning) { пытаться { // Это блокируется до тех пор, пока сообщение не станет доступным MessageBase msg = MessageQueue.Take(); если (сообщение != ноль) { Секундомер stopWatch = новый секундомер(); стопВатч.Старт(); BinaryFormatter f = новый BinaryFormatter(); MemoryStream мс = новый MemoryStream(); f.Serialize(мс, сообщение); длинный msgSize = ms.Length; log.Debug($"Передача - {msg.Report(true)} - {msgSize} Байт - {stopWatch.ElapsedMilliсекунды} мс"); f.Serialize(_client.GetStream(), msg); стопВатч.Стоп(); log.Debug($"Передано - {msg.Report(true)} - {stopWatch.ElapsedMilliсекунды} мс"); мс.Закрыть(); } } поймать (Исключение e) { журнал.Ошибка(е); Отключить(); } } while (MessageQueue.TryTake(out _)) { } log.Debug("TCPCommunicationLayer - Выход из TransmittingThread"); } MessageBase определяется как:

[Сериализуемый] публичный абстрактный класс MessageBase { защищенная база сообщений (имя строки) { Имя = имя; Guid = Guid.NewGuid(); } общедоступное руководство Guid { get; } общедоступная строка Имя {get; } } [Сериализуемый] открытый класс ParameterMessage: MessageBase { общедоступное параметрическое сообщение (имя строки, данные T) : база (имя) { Данные = данные; } общественные данные T {получить; } } Передача следующего класса размером около 5 МБ занимает около 500 мс:

[Сериализуемый] общедоступный класс SharedPreview: SharedPreviewParameters { частный байт[] _previewImageBuffer = Array.Empty(); частный байт[] _labelImageBuffer = Array.Empty(); public SharedPreview (ScanInfo scanInfo, List RegionsOfInterest, List PredictiveFocusPoints) : base(scanInfo, RegionOfInterest, PredictiveFocusPoints) { } частный байт [] EncodeImage (изображение растрового изображения) { // ... } частный BitmapImage ExtractImage (буфер байта []) { // ... } } Но следующий класс размером всего 200 Кб занимает около 20 секунд:

[Сериализуемый] открытый класс ClientLogDefinition { общедоступная строка Имя файла {get; набор; } общественная строка FullPath {получить; набор; } общедоступная строка Content {get; набор; } } [Сериализуемый] общедоступный класс SharedClientLogs { общественный список ClientLogs {get; } = новый список(); } Я понимаю, что мог бы преобразовать строки в массивы байтов, что могло бы решить проблему, но мне бы очень хотелось знать, что вызывает очень низкую производительность при работе с большими строками
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Замена BinaryFormatter в С#
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Многопоточная десериализация с использованием BinaryFormatter
    Гость » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • Исключение BinaryFormatter при попытке получить несуществующий ключ предпочтения в SettingsProperty в System.Configurati
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • BinaryFormatter десериализует вредоносный код?
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Чтобы иметь разное время ожидания сеанса для разных пользователей
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»