request and response 以及 IO操作 ,熟悉原理的牛牛请看

Hmg-L 2015-01-28 05:50:32
小弟最近做了个图片服务器。类似与淘宝,可以通过request的url来进行图片的压缩和等比例缩放。
过程就是:
1.获取原图时直接response.WriteFile(图片物理路径);
2.获取压缩图片时,先判断该尺寸是否压缩过,没有压缩过的话进行压缩,并保存为图片文件(压缩过的),然后response.WriteFile(图片物理路径);

这种方式在使用时没有什么问题。

但是突发奇想,为什么我要保存一次图片文件?
为何不用二进制来输出呢?

所以我又设计了一个逻辑:
1.获取原图时 response.OutputStream.Write(图片转的字节, 0, 长度);
2.获取压缩图片时,先压缩处理,然后转为二进制流来输出。

这种也是成立的,因为反应都是毫秒级,我无法判断哪种更合理一点。

主要是第一种会有一个保存的过程,但是之后只需要调取就可以了。
第二种呢,每次都要进行一次压缩

邀请大家帮我分析一下两种的利弊。谢谢

...全文
417 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
饕餮123 2015-02-06
  • 打赏
  • 举报
回复
第二个好,结贴给分吧
Hmg-L 2015-01-30
  • 打赏
  • 举报
回复
没人回答了么? 等待好久了!自己顶一个
Hmg-L 2015-01-28
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
首先,如果对图片压缩请求许多都是重复的,那么当然是少用CPU点更好。
感谢p神到来。 这点是指的,建议第一种方案吗? 还有304状态我已经做好了 获取If-Modified-Since代码如下:

 DateTime dt;
            if (DateTime.TryParse(request.Headers["If-Modified-Since"], out dt))
            {
                if ((DateTime.Now - dt).Hours < 60)
                {
                    response.StatusCode = 304;
                    response.End();
                    return;
                }
            }
制作LastModified代码如下:

            response.ClearContent();
            response.ContentType = request.ContentType;
            response.Cache.SetCacheability(HttpCacheability.Public);
            response.Cache.SetLastModified(DateTime.Now);
            response.Expires = 60;
  • 打赏
  • 举报
回复
如果你做一个有着大量图片的程序,特别是当用户使用鼠标(或者手指)滑动时要实时查看大量新图片,你会看得很清楚,这种速度的差别巨大,用提体验完全不是一个级别的(一个卡得要死,另一个相对来说流畅多了)。
  • 打赏
  • 举报
回复
首先,如果对图片压缩请求许多都是重复的,那么当然是少用CPU点更好。 其次,asp.net不支持304检验(所以如果使用iis直接下载图片文件,会比你的asp.net程序平均快100倍以上)。你应该自己实现这个检验。当客户端发来的信息跟图片文件的信息一致时,应该返回304状态,而不是输出图片。

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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