Com que frequência o método GetObjectData de cada objeto deve ser chamado durante a serialização personalizada?
-
28-09-2019 - |
Pergunta
Estou serializando os dados no meu aplicativo usando serialização personalizada, ou seja, cada uma das classes que estou armazenando tem o [Serializable]
atributo e implementos ISerializable
. O gráfico de objetos sendo serializado é razoavelmente complexo, com muitas referências cruzadas entre os objetos/classes. A serialização funciona, mas é muito lento. :(
Colocando um ponto de interrupção em cada classe relevante GetObjectData
Método, descobri que estou recebendo muitos, muitos mais hits do que obtidos.
Estou confuso - meu entendimento da estrutura de serialização foi que ele armazenaria cada objeto apenas uma vez, mesmo que o gráfico de objetos contivesse várias referências a ele. Eu assumi que isso significava que cada objeto GetObjectData
O método precisaria ser chamado apenas uma vez durante a economia. Estou errado?
E se sim, há algo que eu possa fazer nessa abordagem para reduzir o número de chamadas para minhas aulas ' GetObjectData
métodos?
Obrigado.
Solução
o MSDN DOCs Não garante apenas 1 chamada por instância do objeto.
Você já tentou isso com diferentes formatados? Existem comentários aqui No sentido de que o trabalho selecionado estava sendo feito para melhorar isso. Especificamente para Indigo (também conhecido como WCF).
Não é garantido que esse método seja chamado apenas uma vez por instância do objeto durante a serialização. Portanto, o método deve ser implementado de tal maneira que seu comportamento seja o mesmo, independentemente do número de vezes que é chamado.