【随】Silverlight请求服务的缓存文件问题
2010-03-06 17:23 拖鞋不脱 阅读(1415) 评论(1) 编辑 收藏 举报问题描述
用Silverlight和WCF做上传图片,结果图片上传一半就报了错,然后屏幕右下角弹出“磁盘空间不足”的警告,发现C盘竟然只剩下十几兆的空间了。刷新一下页面,C盘空间又恢复了原来的大小(1G左右)。
问题原因
经过一番检查,发现Silverlight在调用Web服务的时候,每个请求都会在系统盘生成临时文件(在Win7下,位置是C:\Users\用户名\AppData\Local\Temp\),临时文件以XCP做前缀,然后跟以一串4位数字,并且每个临时文件都是20M。
而且只有当网站部署在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能解决这一问题。
联系我
关注SQL、.Net、Silverlight、网页设计。