首页 新闻 会员 周边

使用SilverLight客户端页面时创建临时文件达到几G的问题,各大高手请留声

0
悬赏园豆:200 [已关闭问题]

这样的一个问题
有个页面会动态加载大约二百个用户控件 ,其中每个用户控件都会有大约两次访问数据库(或其它的webservice服务),该页面操作会引起动态加载用户控件的变化, 由此带来一个问题
C:\Documents and Settings\...\Local Settings\Temp 在这个目录里会产生很多这样的临时文件, 这样的文件膨胀最大时居然达到了10G以上,一般情况也会好几百M

创建的临时文件的规则如下
XCP1910.tmp 20480Kb
XCP1911.tmp 20480Kb
XCP1912.tmp 20480Kb
XCP1913.tmp 20480Kb
XCP1914.tmp 20480Kb
XCP1915.tmp 20480Kb
XCP1916.tmp 20480Kb
....

分析一下 看问题出现在哪个地方 以及可能的解决方案

是什么原因引起会在 系统临时目录下创建这多的临时文件
会不会与 访问的webservice服务有关
这里是我的服务相关的配置文件内容




maxReceivedMessageSize="2147483647">








我的猜猜:
几个疑点:
1、异步数据访问的问题,可能会导致silverlight在系统临时文件目录中创建tmp的临时文件
2、webservice的配置中相关的maxBufferSize可能会有一定的影响,导致内存分析过多,从而引起系统会开销一定的硬盘空间用以缓存内存数据
3、系统中因为动态创建了很多控件,可能与大量开销内存的操作相关,也会引起缓存内存而创建硬盘的临时文件

请大家在讨论问题时尽可能的分析出问题所在
对于为什么页面中要加载这么多的动态控件 ,以及控件为什么要访问这多次 的数据我想请暂不要在这方面关注

谢谢大家

问题补充: 谢谢二位兄弟 , 我觉得有些道理, 的确程序在运行中会出现数据访问的错误,这个错误的产生会不会产生tmp文件 这个我还没有测试过 不过好像已经有些接近问题的本质了 从另一个方面我已经测试过 动态产生二百多个控件(用户控件)并不会产生tmp的临时文件
我想去长安的主页 我想去长安 | 初学一级 | 园豆:0
提问于:2009-09-30 18:20
< >
分享
其他回答(1)
0

关注,帮楼主UP下

云中深海 | 园豆:230 (菜鸟二级) | 2009-09-30 20:15
0

这篇文中有提及:

http://unkar.jp/read/pc12.2ch.net/tech/1244812356

但翻译过来也不太明白是什么玩意,就看到提到了这种20M一个的临时文件,说好像是错误日志一类的东西,楼主你进去看看能不能获得什么启示吧。

如果是错误日志的话,你可以试试用Relese版而不用Debug版运行一下,看看还有没有,还有的话只能在调试的时候监视一下输出窗口,看看到底是什么时候经常触发一些被吞掉的异常,再进行处理了。

 

————————————————————————————————————————

摘录:

 

以下の現象で困っています。分かる方がいらっしゃれば教えてください。 
VS2008で Silverlight3.0 Webアプリを作成しているのですが、WebClientでファイルを取得するたびに 
Tempフォルダに XCP???.tmpという 20MBのファイルが次々追加されてしまいます。 
数十秒に一度の頻度で取得するので、大容量になってしまい無視できません。 

この XCP???.tmpファイルを作成しないようにする方法、またはすぐに消す方法や情報等がありましたら 
教えてください。 

これまでに試したこと。 
・Webサーバ(geocities)に、作成した zapファイルを配置して実行すると tmpが作成される。(Debug、Release共に) 
 (VSからのテスト実行では tmpは作成されない。(Debug、Release共に)) 
・WebClientの AllowReadStreamBufferingは true、false共に効果なし。 
・ボタンClickの処理で毎回 _webClient = new WebClient();を行っても tmpは削除されない。 
・_webClientをクラス変数ではなく btnStart_Click()内で作成しても効果なし。

-------------------------------

>525 確認ありがとうございます。 
> TMPファイル内を"XCP*.tmp"で検索かけてみたけど出てこなかった。 
*の部分は2桁以上の16進のようです。 
実行するたびに数値が増えていきますが、必ずしも1ずつ増えるわけでもありません。 
私は環境変数 TEMPと TMPを C:\Temp に変更しているのですが、このフォルダを見てると、 
上で書いているボタンを押すたびに、ファイルが1つずつ増えていってしまいます。 

> そのtmpファイル内の内容はなんでしょう?実はエラーログ的な何かとか。 
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 
と出て、メモ帳とかバイナリエディタで確認することができません。作成されたファイル全て。 

ログの線だと、どの設定でそうなるのかよくわかりません。 
(プロパティはアセンブリ情報くらいしか触ってないはず…) 
Debugビルドだけでなく Releaseビルドでも同じ現象でもありますし。 

通信時なので、非同期通信のデータを溜めておくバッファではないかとも想像しています。 
(データ量が多すぎたときに RAMを圧迫しないようにこのファイルに溜めていく?) 
そうだとしても、設定で通信処理後自動削除、もしくはメソッド等で削除ができないと 
溜まるばかりですし。(それを一部試したのが AllowReadStreamBuffering) 

以下はM$のFileMonで見たログです。 
Process Request Path Result Other 
iexplore.exe CREATE C:\Temp\XCP23.tmp SUCCESS Options: Create Access: Read 
iexplore.exe CLOSE C:\Temp\XCP23.tmp SUCCESS 
iexplore.exe CREATE C:\Temp\XCP23.tmp SUCCESS Options: OverwriteIf Access: 0013019F 
iexplore.exe DIRECTORY C:\Temp\ SUCCESS FileBothDirectoryInformation: XCP23.tmp 
iexplore.exe QUERY INFORMATION C:\Temp\XCP23.tmp SUCCESS Length: 0 
iexplore.exe SET INFORMATION C:\Temp\XCP23.tmp SUCCESS Length: 20971520 
iexplore.exe READ C:\Temp\XCP23.tmp SUCCESS Offset: 0 Length: 32768 
↑ここまでで止まります。 
IEを閉じたときには↓ 
iexplore.exe CLOSE C:\Temp\XCP23.tmp SUCCESS

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-10-01 21:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册