代码改变世界

【随】Silverlight请求服务的缓存文件问题

  拖鞋不脱  阅读(1417)  评论(1编辑  收藏  举报

问题描述

用Silverlight和WCF做上传图片,结果图片上传一半就报了错,然后屏幕右下角弹出“磁盘空间不足”的警告,发现C盘竟然只剩下十几兆的空间了。刷新一下页面,C盘空间又恢复了原来的大小(1G左右)。

问题原因

经过一番检查,发现Silverlight在调用Web服务的时候,每个请求都会在系统盘生成临时文件(在Win7下,位置是C:\Users\用户名\AppData\Local\Temp\),临时文件以XCP做前缀,然后跟以一串4位数字,并且每个临时文件都是20M

image

而且只有当网站部署在IIS中通过IE内核的浏览器浏览时才会出现这种情况,非IE内核浏览器或者网站在VS中都不会生成相应的临时文件。

考虑20M和在ServiceReferences.ClientConfig中默认设置的

maxBufferSize="2147483647"  maxReceivedMessageSize="2147483647"

大小上是一致的,所以尝试改变了一下这两个数值(要求必须一致),但临时文件的大小并没有改变。

所以导致临时文件产生的根本原因并没有找到,而且怀疑这就是Silverlight的一个Bug……平视没有注意到是因为请求不频繁,而且临时文件会在一定时间后自动清除,但由于图片上传将图片分成了很多小份,每一份都会调用一次服务,而原有的临时文件又没有很快清除,所以1G的空间很快就被吃掉了。

解决办法

通过Google大神,查到有同样问题的仁兄:

Silverlight 3 creates a lot of XCP temp files (20MB each)

http://www.anythingtheycando.com/blog/index.php/2010/02/02/silverlight-temp-file-issue/ (需翻)

找到了解决这一问题的办法:

在每个服务请求的回调函数中调用GC.Collect();强制清除这一缓存文件。事实上我也不是很明白GC.Collect()为什么会回收这种临时文件垃圾……谁让咱连它怎么产生的都不知道呢。

虽说GC.Collect()对性能会产生影响,但为了程序正常运行计,也不得不如此了,但愿Silverlight4能解决这一问题。

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示