Próba znalezienia się na dnie wyjątku OutOfMemoryException Stwierdziłem, że. BufferManagers, używany przez buforowany przez WCF TransferMode, był odpowiedzialny za marnowanie dosłownie setek megabajtów (zobacz pytanie i moją własną odpowiedź na How can I prevent BufferManager/PooledBufferManager in my WCF client app from wasting memory?, aby uzyskać szczegółowe informacje i dowiedzieć się, jak to naprawić, przełączając się z "buforowanego" na "przesyłany strumieniowo").Prawdziwy przypadek użycia BufferManager
Pomijanie WCF, BufferManagers zostały wymyślone jako lepsza alternatywa dla tego, co normalnie zrobiłbyś: po prostu przydzielanie tablic bajtowych, gdy ich potrzebujesz i poleganie na GC, aby je wyczyścić i poddać recyklingowi, gdy odniesienie wykracza poza zakres.
Moje pytanie brzmi: czy ktoś użył modułów BufferManagers w rzeczywistej aplikacji, aby uzyskać zauważalną różnicę pod względem wydajności, aby usprawiedliwić niedogodności związane z koniecznością ręcznego czyszczenia .Clear() BufferManager (jeśli było to konieczne) ?
A jeśli tak, czy ręczne utworzenie bufora jednobajtowego i zachowanie odniesienia do niego nie rozwiązałoby tego konkretnego problemu?
edytowany moje pytanie, aby to (jeszcze) bardziej jasne, że mówię o [.net'S] (http://msdn.microsoft.com/en-us/library/ system.servicemodel.channels.buffermanager (v = vs.100) .aspx). Nie wiem, dlaczego napisałeś własną (i użyłeś jej do odpowiedzi na moje pytanie dotyczące implementacji .net). Ale poza tym, niezależnie od tego, że twoja implementacja nigdy nie zwalnia raz zdobytej pamięci, czy profilowałeś, jak radzi sobie z rezygnacją z pracy do wbudowanego GC? –
Drugi akapit zawiera wyniki profilera. –