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

verybigmouthz 2009-09-30 06:35:17
这样的一个问题
有个页面会动态加载大约二百个用户控件 ,其中每个用户控件都会有大约两次访问数据库(或其它的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、系统中因为动态创建了很多控件,可能与大量开销内存的操作相关,也会引起缓存内存而创建硬盘的临时文件

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

谢谢大家

...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hao_ljp 2009-10-10
  • 打赏
  • 举报
回复
ding
kukumaiwu 2009-10-07
  • 打赏
  • 举报
回复
lz說的那個2ch的網頁目前也只有迴避的方案
就是GC.Collect();
保留最新的tmp
原文
引用
543 :523[sage]:2009/09/15(火) 22:49:45
対処療法ですが、tmpの作成個数を抑える方法が見つかりました。
それはガベージコレクション(以下GC)。
通常は自動にまかせて問題ないし、メモリにしか関係しないと思っていました。
(少なくとも私はメモリを食いつぶされた経験はありません。今回もメモリは十分残っていました。)

私の↑のプログラムで言えば、mWebClient_DownloadStringCompleted(…)の処理の最後に以下を記述します。
GC.Collect();
すると、最新の tmpのみ残りそれ以前のは即時削除されました。

元々問題となっていた、ループ中で通信して数十GBも食いつぶすプログラムでは、10~15個 tmpが溜まった後
最新以外が一気に消えるという繰り返しになりました。
(こちらも GCは通信処理の末尾に記述)
このプログラムの処理をもう少し詳しく書くと、
(1) メインの処理は、0.5秒間隔のTimerで常にある処理をしている。
(2) 上記処理を行いながら、約10秒ごとに非同期でファイルを取得する。← DownloadStringAsync
のようなことをしています。
この場合は、(2)で毎回GCを行っても、必ずしも削除されるわけではないようです。

Bestな解決方法とは言えませんが、とりあえず回避はできるようですので〆ようと思います。
(ここはずっと見てますので、根本解決が見つかれば書き込んでいただければ幸いです。)
協力してくださった皆様、ありがとうございました。m(_ _)m

GCが tmp削除に関連している理由は予想しかできないので書きませんが、この対処方法を見つけた時は、
「何でやねん」と叫んだことを付記しておきます。w


繼續關注
weiming118 2009-10-03
  • 打赏
  • 举报
回复
Silverlight不会产生那么大的临时文件的
jv9 2009-10-02
  • 打赏
  • 举报
回复
看不懂日文。不过你可以按照他的方法试试,release一个版本,测试一下。
verybigmouthz 2009-10-02
  • 打赏
  • 举报
回复
XAP不过才几M 放的位置自然会在IE的临时文件下 ,我这里的临时文件所产生的目录并不是XAP文件所在的目录,其中的原因产生我也并不知道是如何产生的 不过在博客园中有一位兄弟回复了 我觉得可能是对的
不过我仍要进一步验证


这篇文中有提及:

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

最佳答案: 得分: 22小时前 回答者:斯克迪亚 - 大侠五级
jv9 2009-09-30
  • 打赏
  • 举报
回复
能问一下你编译后的XAP有多大么? 另外,能确认10G的临时数据,是Silverlight产生的么?

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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