0

ファイル システムへの ViewState の保存に関するこの記事を参照しています。

これは良いことですが、それがどのページであるかについて何も保存しないため、理想的ではありませんviewstate。ページとそのviewstateファイルの間でマッピングが行われていないようです。Asp.NetViewState を取り除きながら、Web フォームのリッチ プログラミング モデルを使用できるようにしたいと考えています。セッションに保存できますが、高すぎます。ファイルシステムに保存することをお勧めします。

私が考えることができる 1 つのアプローチはGuid、隠しフィールドにページを保存し、実際の ViewState をファイル名 Guid に保存することです。これは機能しますが、これらの ViewState ファイルを消去するディレクトリをクリーンアップするにはどうすればよいですか? このような単純なタスクのために自動化されたサービスを作成し、これらのファイルを定期的に削除するのは面倒です。

何か考え/アドバイスはありますか?

4

6 に答える 6

1

MongoDB を参照してください。

http://www.mongodb.org/

ドキュメント中心の DB である MongoDB で ViewState を永続化するこの記事。これは、Sql Server よりもはるかに高速であり、フラット ファイルに保存するよりもはるかに優れています。

それを正確に示す記事は次のとおりです。

http://highoncoding.com/Articles/699_Storing_ViewState_in_MongoDb_Database.aspx

ただし、古いファイルを削除するという当初の懸念は依然として存在します。Session_Endイベントで古いViewStateドキュメントをクリーンアップするコードを書くことができます

また

OutProcセッションを保存するためにまたはSqlServerセッションモードを使用している場合、古いファイルを常にチェックし続けLoadPageStateFromPersistedMedium、そこにある古いファイルを削除する必要があるかもしれません.Session_Endはこれらのモードでは起動しませんが、あなたが心配しているのでSql Serverを使用しているとは思えません.それについて :)

于 2012-05-17T17:13:27.960 に答える
0

あなたの質問に基づいて、ビューステートのHTMLオーバーロードが必要ない場合は、すべてのコントロールで無効にすることができます。テキストボックスの値を本当に覚えておく必要がありますか?

ビューステートを維持したいがHTMLには残したくない場合は、セッションをお勧めします。デフォルトでは、サーバーメモリを使用します。高速です。SQLまたはWindowsサービスでSessionを使用することもできますが、オプションは遅くなります。

必要に応じてCookieを使用することもできます。これは別のオプションであり、クライアントに残ります。

ファイルの使用はお勧めしません。読み取りが遅く、1人のユーザーしかこれらのファイルにアクセスできないため、多くのファイルを生成して維持する必要があります。

しかし、私の経験に基づいて、ビューステートを無効にするか、変更せずにそのままにしておきます。

それが役に立てば幸い。

于 2012-05-17T17:17:24.550 に答える
0

Windows Server AppFabric を見てください。構成設定を介して実装するのは簡単です...

http://msdn.microsoft.com/en-us/windowsserver/ee695849

http://en.wikipedia.org/wiki/AppFabric

于 2012-05-17T16:50:58.353 に答える
0

ViewState を保存するコードは、ViewState を保存しているディレクトリ内のファイルを反復処理し、期限切れと見なされるファイルを削除できます。技術的には、これにより非常に古い ViewState がぶらぶらすることができますが、新しい ViewState が保存されていない場合に限ります。そのため、ファイルシステムがオーバーフローすることはありません。

または、スレッドを起動してバックグラウンドでこれを行うこともできます。アプリケーション コンテキストに格納されているフラグを使用して、これを複数回起動することを回避できます。より複雑なため、このソリューションはあまり好きではありません。

于 2016-02-14T16:56:28.313 に答える
0

多くの人が ViewState について見落としていることの 1 つは、ViewState がすべてのコントロールでデフォルトで有効に設定されていることです。多くの場合、ViewState は必要ありません。ViewState のサイズが気になる場合、最初に行うことは、不要な ViewState を無効にすることです。

CP の記事で説明されている解決策では、テキスト ボックスなど、ユーザーが値を直接変更できるコントロールに ViewState を使用する必要があることは言及されていません。JavaScript または jQuery の回避策と一連のクエリ文字列を使用しない限り、ViewState はユーザーがフォームに入力した値を取得する方法です。

したがって、検討しているソリューションが価値のある唯一の場所は、asp:Label または asp:Literal があり、ボタンのクリックまたはその他のイベントに応答してサーバー側コードでその値を変更している場所です。 、および変更が後続のポストバックで永続化されることを確認する必要があります。

于 2012-05-17T16:56:26.693 に答える
0

SQL サーバーを使用してセッション状態を保存できます。それは、「独自の」ソリューションよりもはるかに優れています。

http://support.microsoft.com/kb/317604

于 2012-05-17T16:35:13.977 に答える