Matriz de estruturas ou uma estrutura com matriz para cada uma de suas propriedades

StackOverflow https://stackoverflow.com/questions/2290075

  •  21-09-2019
  •  | 
  •  

Pergunta

Ao projetar uma API, posso querer persistir detalhes (por exemplo, um processo em execução) em minha própria estrutura personalizada. No entanto, se eu vou fazer isso por mais de um processo, o que significa que preciso de várias estruturas, devo ter uma variedade de estruturas ou uma estrutura com uma matriz para cada uma de suas propriedades (por exemplo interessado em).

Qual caminho é melhor para desempenho e melhor para uma biblioteca de API/classe?

Obrigado

Foi útil?

Solução

IMHO, você deve fazer uma variedade de estruturas, apesar do desempenho que você recebe para instantações de todas as estruturas. O senso organizacional de um estado ser armazenado em uma estrutura supera em muito a perda de desempenho, e usar uma estrutura com um monte de matrizes e simplesmente atribuir a cada processo um índice em várias matrizes é muito confuso e pode ser uma enorme dor para depurar depurar .

Outras dicas

Você pode considerar usar um class ao invés de um struct E eu usaria uma lista de classes.

Eric Lippert tem alguns argumentos contra o uso de matrizes em uma API. Um dos mais atraentes para mim é o motivo pelo qual você deseja manter o tamanho da coleção fixo, mas permita que os consumidores modifiquem o conteúdo. Você pode ver mais aqui.

Por fim, você pode armazená -los internamente usando matrizes, mas eu evitaria expor isso através da API. Se as pessoas precisarem enumerar, use ienumerableu003CT> em vez de.

Do ponto de vista de armazenamento de dados, se alguém frequentemente acessar todas as partes de um itens com mais frequência do que um acessando alguma parte específica de um grupo de itens consecutivos, o comportamento do cache será melhor com uma matriz de estruturas.

Uma pergunta mais interessante é como expor os dados. Se você expor a estrutura como indexante, qualquer pessoa que queira alterar um campo da estrutura terá que ler a estrutura, alterar o campo em sua cópia temporária e escrevê -la de volta. Você pode expor os métodos para ler/gravar propriedades individuais, mas "foo.setBar (100, 23)" parece um pouco menos natural que "foo (100) .bar = 23". Também permita a última sintaxe, sugiro que o indexador retorne uma estrutura com dois campos privados, "raiz" e "índice", e propriedades para cada campo da estrutura, para que, por exemplo, o setter da propriedade da barra do indexador executaria root.setBar (índice, valor). O indexador também deve ter uma propriedade "AsWhatestructType" para obter/definir a estrutura como um todo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top