J'ai un ensemble très grand nombre de fichiers binaires où plusieurs milliers lues et traitées images brutes de vidéo sont séquentiellement, et je suis maintenant de l'optimiser comme il semble être plus liée CPU que I/O-lié..NET Read Binary File Performance
Les cadres sont actuellement en cours de lecture de cette manière, et je soupçonne que c'est le plus grand coupable:
private byte[] frameBuf;
BinaryReader binRead = new BinaryReader(FS);
// Initialize a new buffer of sizeof(frame)
frameBuf = new byte[VARIABLE_BUFFER_SIZE];
//Read sizeof(frame) bytes from the file
frameBuf = binRead.ReadBytes(VARIABLE_BUFFER_SIZE);
Ne serait-il faire une grande différence dans .NET pour réorganiser les E/S pour éviter créer tous ces nouveaux tableaux d'octets avec chaque image?
Ma compréhension du mécanisme d'allocation de mémoire de .NET est faible que je viens d'un pur C/C++ fond. Mon idée est de réécrire ceci pour partager une classe de tampon statique qui contient un très grand tampon partagé avec un entier gardant la trace de la taille réelle du cadre, mais j'aime la simplicité et la lisibilité de l'implémentation actuelle et je préférerais la garder si CLR gère déjà cela d'une manière que je ne connais pas.
Toute entrée serait très apprécié.
Avez-vous exécuté un profileur pour vous assurer que les performances ne proviennent pas d'autres sources? Ou êtes-vous juste allé et supposé "Alors c'est probablement ça"? –
Salut David, J'ai couru le profileur de performance à plusieurs reprises et cette méthode particulière est la plus chère. Par conséquent, je cherche à voir si cette méthode "new byte []" est un tueur de performance évident dans .NET. En tant que programmeur C, cela ressemble à des milliers d'instructions "malloc" pour chaque tampon, ce qui serait certainement plus lent qu'un tampon réutilisé. – rnd