Performance hit of enabling rewind on all HTTP requests in ASP.Net Core
up vote
0
down vote
favorite
I am converting a large ASP.NET application to an ASP.NET core application, and I have come across several situations in which we cannot read Request.Body
stream because it was already read by the time we wanted to read it. Now I realize it would be best to fix these little races but in the interest of getting this moving forward, I've temporarily added the following middleware:
app.Use(async (context, next) => {
context.Request.EnableRewind();
await next.Invoke();
});
What is the performance impact of enable rewind on all the HTTP requests - and was this previously the behavior in ASP.NET anyway?
asp.net asp.net-core
add a comment |
up vote
0
down vote
favorite
I am converting a large ASP.NET application to an ASP.NET core application, and I have come across several situations in which we cannot read Request.Body
stream because it was already read by the time we wanted to read it. Now I realize it would be best to fix these little races but in the interest of getting this moving forward, I've temporarily added the following middleware:
app.Use(async (context, next) => {
context.Request.EnableRewind();
await next.Invoke();
});
What is the performance impact of enable rewind on all the HTTP requests - and was this previously the behavior in ASP.NET anyway?
asp.net asp.net-core
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am converting a large ASP.NET application to an ASP.NET core application, and I have come across several situations in which we cannot read Request.Body
stream because it was already read by the time we wanted to read it. Now I realize it would be best to fix these little races but in the interest of getting this moving forward, I've temporarily added the following middleware:
app.Use(async (context, next) => {
context.Request.EnableRewind();
await next.Invoke();
});
What is the performance impact of enable rewind on all the HTTP requests - and was this previously the behavior in ASP.NET anyway?
asp.net asp.net-core
I am converting a large ASP.NET application to an ASP.NET core application, and I have come across several situations in which we cannot read Request.Body
stream because it was already read by the time we wanted to read it. Now I realize it would be best to fix these little races but in the interest of getting this moving forward, I've temporarily added the following middleware:
app.Use(async (context, next) => {
context.Request.EnableRewind();
await next.Invoke();
});
What is the performance impact of enable rewind on all the HTTP requests - and was this previously the behavior in ASP.NET anyway?
asp.net asp.net-core
asp.net asp.net-core
asked Nov 19 at 19:01
tacos_tacos_tacos
5,841755107
5,841755107
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09
add a comment |
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381042%2fperformance-hit-of-enabling-rewind-on-all-http-requests-in-asp-net-core%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What do you think happens when you buffer the whole input stream into the memory? Network streams can only be read once, which make sense since you send data and its read. No way to rewind. To rewind, you have two option: read it into memory or write it to the file system so you can rewind. Think the rest for yourself about performance and efficiency of the whole thing :)
– Tseng
Nov 19 at 19:27
I guess if the requests don't live that long and you have sufficient memory, it's not so bad is it? And wasn't this the default behavior in ASP.NET (rewinds were enabled by default, so performance shouldn't be any "worse" than before all things being equal)
– tacos_tacos_tacos
Nov 19 at 19:41
Well, imagine 100 requests with a 100 MB file sent to your actions :P Its not an big issue with small requests and if swaps to filesystem you can have heavily degraded I/O performance in high traffic scenarios (or simply when someone DDoS your website). Just look at the sources: github.com/aspnet/HttpAbstractions/blob/2.1.1/src/… & github.com/aspnet/HttpAbstractions/blob/2.1.1/src/…
– Tseng
Nov 19 at 21:09