Page 1 sur 1

Problème de "double allocation"

Publié : 11 Sep 2015 19:48
par Matt45400
Bonsoir tout le monde,

j'alloue des arrays de ushort régulièrement (32768 bytes plusieurs dizaines de fois par seconde) mais du coup la gen 0 est pleine et le garbage collector passe, ce qui cause de sacrées baisses de perfs. Du coup je voulais savoir s'il n'était pas possible d'allouer mes arrays directement en gen 2.

https://www.simple-talk.com/dotnet/perf ... nceptions/ , le #2 semble expliquer mon problème.

Re: Problème de "double allocation"

Publié : 14 Sep 2015 17:38
par Matt45400
Personne ? :?

Re: Problème de "double allocation"

Publié : 14 Sep 2015 23:09
par minirop
tu devrais peut-être nous expliquer pourquoi tu alloues autant de mémoire ? tu as tenté de faire du pooling ?

Re: Problème de "double allocation"

Publié : 15 Sep 2015 01:08
par artemisart
+1 si tu fais du pooling, tes arrays sont déjà passés en gen supérieure donc le GC n'a plus à passer et tu gagne des perfs (et de la mémoire).
PS : allouer tout ça plusieurs dizaines de fois /s ça fait dans les 50-200 Mo / minute, ça parait énorme quand même.

Re: Problème de "double allocation"

Publié : 15 Sep 2015 11:14
par Matt45400
Oui quelques infos :
c'est au niveau des chunks de mon projet voxel. Chaque chunk de 32*32*256 contient 8 slices de 32*32*32 avec l'array de ushort.
J'ai pensé au pooling oui, du coup la mémoire n'augmente que si des joueurs se connectent, mais elle ne diminura pas si un joueur se déconnecte. Ou alors je suis passé à côté d'un truc.
Merci de votre aide

Re: Problème de "double allocation"

Publié : 22 Sep 2015 18:59
par Matt45400
Petit up

Re: Problème de "double allocation"

Publié : 22 Sep 2015 22:43
par Titan
Ta réponse est dans la question. Tu te tire un obus dans le pied à vouloir faire un voxel engine sans pooling. Tu devrais parler d'avantage de la problématique réseau qui te dérange, mais ça ne me parait pas avoir de rapport directe.

Définit ou hardcode ta distance de vue maximal et alloue une pool en conséquence à l'initialisation de ton jeu, ou encore mieux, met en place un buffer tournant de la taille de ton champ de vision: N'oublie pas que les "chunks" à partir desquelles tu génère tes mesh n'ont pas besoin de correspondre à des blocs mémoire, tu peut donc alloué une unique zone mémoire.

Puisque on parle de réseau, les bloc que tu sérialize ne sont pas non plus obligé de correspondre au mesh, il va également être nécessaire de les compresser. Que doit faire le serveur ? a quelle point est-il autoritaire ? a-t-il besoin de les décompresser ou peut-il se contenter de stocker / relayer ?

Je t'invite a lire les 56 pages de ce thread, ainsi que tout les liens qui sont données à tout les posts et tout les liens que tu trouvera sur ces pages web, j'y avais passé beaucoup de temps mais j'y ai appris énormément. Beaucoup de "gros" studio y ont présenté l'architecture de leur voxel engine.

Re: Problème de "double allocation"

Publié : 23 Sep 2015 22:03
par Matt45400
Merci de ta réponse Titan.
Je vais partir sur du pooling