Comments (6)
The call to memoryStream.ToArray()
is undoing any possible optimizations of using a pooled stream. The memory is probably going up in production because you have so much spare memory that no GC happens.
In your case, you would need to keep the stream alive (undisposed) until after you were done with the TransferFile
it was being used in. If TransferFile
can only accept a buffer, it should also accept a length so that it knows how much of the buffer is valid.
from microsoft.io.recyclablememorystream.
The call to
memoryStream.ToArray()
is undoing any possible optimizations of using a pooled stream. The memory is probably going up in production because you have so much spare memory that no GC happens.In your case, you would need to keep the stream alive (undisposed) until after you were done with the
TransferFile
it was being used in. IfTransferFile
can only accept a buffer, it should also accept a length so that it knows how much of the buffer is valid.
I can't avoid using the ToArray() because it is calling a webservice that only accepts a byte array. Is it in this case better to use a normal MemoryStream instead of a Recyclable one?
from microsoft.io.recyclablememorystream.
from microsoft.io.recyclablememorystream.
This goes a little bit above my head how all this works, the reason I started with the RecyclableMemoryStream was because I move a lott of data back and forward. I used to have regular out of memory exceptions even on byte arrays smaller than 200MB. These problems were gone when starting to use this library.
Is it possible to use GetBuffer() instead of ToArray() to get the underlying byte array to avoid that a new copy is made in memory? Or is this asking for other problems?
from microsoft.io.recyclablememorystream.
GetBuffer
is preferred to ToArray
because it will return a reference to the underlying buffer currently in use, but since those buffers are pooled, they will be larger than the amount of data you have stored. If the API you pass the buffer to doesn't understand that, it might assume the whole buffer has valid data, which isn't the case. That's why it's important to also use the length of the stream. ToArray
always creates a new array of exactly the right length. Useful for those APIs that need just a buffer, but it destroys the benefits of pooling.
from microsoft.io.recyclablememorystream.
Thanks for helping me out with these questions, best chrismas wishes and have a good new year.
from microsoft.io.recyclablememorystream.
Related Issues (20)
- Assign a large buffer HOT 3
- This repo is missing important files
- Add NET6 target HOT 3
- RecyclableMemoryStream.ToString should not throw if disposed HOT 2
- ArgumentNullException during Write HOT 1
- Enable nullable annotations and warnings HOT 4
- Change Target Framework from `net5.0` to `net6.0` HOT 3
- Reduce the number of Method/Constructor overloads. HOT 2
- RMS v3.0 Planning HOT 3
- NullReferenceException possible with M.IO.RecyclableMemoryStream.Dispose(true) HOT 1
- Using memory stream with httpClient post HOT 3
- Is there a plan to contribute to the dotnet/runtime? HOT 4
- FeatureRequest: Add opt-in possibility to zeroed-out buffers HOT 10
- Continous benchmarking HOT 1
- Multiple StreamManagers in referenced libraries - how to find total memory usage HOT 1
- Large pool limit should apply to whole pool, not each slot HOT 1
- Humanitarian Organization Team mbrgi
- ResponseTime is almost doubled with RecyclableMemoryStream. HOT 5
- Question: GetStream copy existing buffer use case HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from microsoft.io.recyclablememorystream.