Response写到了哪里?

PLAYROME 2016-08-21 11:05:17
常规的页面输出是这样的:
for .....
{
lb_buffer[li_i]=....
}
Response.OutputStream.Write(lb_buffer,0,100);
Rsponse.Flush


这里的lb_buffer是通过循环赋值的,现在因为效率问题,能不能直接对Response的缓冲区直接赋值,跳过Write这一步?
...全文
321 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-08-22
  • 打赏
  • 举报
回复
用stringbuilder,然后一次性写入
  • 打赏
  • 举报
回复
单从功能上说,你的 for 循环中,修改 lb_buffer[li_i],然后一次性地将 lb_buffer 前100个字节写出去。如果 li_i 是连续的,那么完全可以在 for 循环内执行 OutputStream.Write或者 OutputStream.WriteByte,无需在 for 之外执行。 话说回来,你所谓的“现在因为效率问题”是无根据的。你测试过吗?写在 for 循环之内、跟写在for循环之后,所谓的效率能差多少?能值1毛钱吗?
  • 打赏
  • 举报
回复
引用 5 楼 PLAYROME 的回复:
深究了一下.NET的代码,很多都是不公开的,没有什么思路。
不过就是把写出字节的 Response.OutputStream.Write(....) 或者 Response..OutputStreamWriteByte(....) 语句写到 for 循环里边,从而不用 lb_buffer 缓冲区了。这个要深究什么不公开的 .net 代码啊? 顺序地向 Stream 写n 个或者 1 个字节,这样的一条语句,可不算是什么“不公开的”技术啊?!!
  • 打赏
  • 举报
回复
引用 4 楼 PLAYROME 的回复:
[quote=引用 3 楼 sp1234 的回复:] 单从功能上说,你的 for 循环中,修改 lb_buffer[li_i],然后一次性地将 lb_buffer 前100个字节写出去。如果 li_i 是连续的,那么完全可以在 for 循环内执行 OutputStream.Write或者 OutputStream.WriteByte,无需在 for 之外执行。 话说回来,你所谓的“现在因为效率问题”是无根据的。你测试过吗?写在 for 循环之内、跟写在for循环之后,所谓的效率能差多少?能值1毛钱吗?
这里的100是举个例子,实际的操作量比这个到很多,几MB的量。 现在循环赋值给Byte数据,然后再OutputStream.Write,实际上OutputStream.Write里的代码是把Byte数组再复制一遍,如此以来效率就很低下了。普通的应用无所谓,我这个应用意识量比较大,而是比较频繁,所以影响很大。 有么有办法直接将数据发出而不用经过几次转手复制,再Flush出去? 深究了一下.NET的代码,很多都是不不公开的,没有什么思路。[/quote] 不管是几M数据,两种写法都已经告诉你了。但现在为止,你对比测试了执行时间吗?差多少?
Poopaye 2016-08-22
  • 打赏
  • 举报
回复
几M的话你嫌多,那就应该这样写,比如每次写1M的数据 for ..... { lb_buffer[li_i]=.... Response.OutputStream.Write(lb_buffer,0,100); }
PLAYROME 2016-08-22
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
100个字节,有什么效率问题,嗯?
这里100的只是举个例子,是操作几MB的数据量
Poopaye 2016-08-22
  • 打赏
  • 举报
回复
100个字节,有什么效率问题,嗯?
维秀斯丢丢 2016-08-22
  • 打赏
  • 举报
回复
什么问题都搞不懂呢
PLAYROME 2016-08-22
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
单从功能上说,你的 for 循环中,修改 lb_buffer[li_i],然后一次性地将 lb_buffer 前100个字节写出去。如果 li_i 是连续的,那么完全可以在 for 循环内执行 OutputStream.Write或者 OutputStream.WriteByte,无需在 for 之外执行。 话说回来,你所谓的“现在因为效率问题”是无根据的。你测试过吗?写在 for 循环之内、跟写在for循环之后,所谓的效率能差多少?能值1毛钱吗?
这里的100是举个例子,实际的操作量比这个大很多,几MB的量。 现在循环赋值给Byte数组,然后再OutputStream.Write,实际上OutputStream.Write里的代码是把Byte数组再复制一遍,如此以来效率就很低下了。普通的应用无所谓,我这个应用数据量比较大,而是比较频繁,所以影响很大。 有么有办法直接将数据发出而不用经过几次转手复制,再Flush出去? 深究了一下.NET的代码,很多都是不公开的,没有什么思路。
PLAYROME 2016-08-22
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
单从功能上说,你的 for 循环中,修改 lb_buffer[li_i],然后一次性地将 lb_buffer 前100个字节写出去。如果 li_i 是连续的,那么完全可以在 for 循环内执行 OutputStream.Write或者 OutputStream.WriteByte,无需在 for 之外执行。 话说回来,你所谓的“现在因为效率问题”是无根据的。你测试过吗?写在 for 循环之内、跟写在for循环之后,所谓的效率能差多少?能值1毛钱吗?
这里的100是举个例子,实际的操作量比这个到很多,几MB的量。 现在循环赋值给Byte数据,然后再OutputStream.Write,实际上OutputStream.Write里的代码是把Byte数组再复制一遍,如此以来效率就很低下了。普通的应用无所谓,我这个应用意识量比较大,而是比较频繁,所以影响很大。 有么有办法直接将数据发出而不用经过几次转手复制,再Flush出去? 深究了一下.NET的代码,很多都是不不公开的,没有什么思路。
  • 打赏
  • 举报
回复
赋值就是调用 Write。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧