- PR -

フォーム情報の保存

投稿者投稿内容
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-12 15:01
話の発端でXMLを用いるという案がありました。
正直よくわからなかったので後回しにしていたのですが、
参考にどこをみたらよろしいでしょうか?DataSetのヘルプが一番でしょうか。

移動ボタンクリックイベントでDataSetを作成して、XMLに保存という流れでしょうか。
XML自体もあまりわかっていないので正直ちんぷんかんぷんです。。。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-12 15:11
引用:

BB.NKさんの書き込み (2004-02-12 15:01) より:

話の発端でXMLを用いるという案がありました。


これだと、一番性能劣化するように思いますが……。
XML解析処理時間、ファイルI/O時間などなど。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-12 15:53
引用:

ぢゃん♪さんの書き込み (2004-02-12 15:11) より:

これだと、一番性能劣化するように思いますが……。
XML解析処理時間、ファイルI/O時間などなど。


 ファイルI/Oは重いですね。解析は、実装する必要はないと思います。設定などでXMLに出す項目だけPublicでRead/Write可能なプロパティを作り、XMLシリアライズすればよいかと。XMLについて「知る」必要も、ほとんどない。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-12 15:55
引用:

ぢゃん♪さんの書き込み (2004-02-12 15:11) より:
これだと、一番性能劣化するように思いますが……。
XML解析処理時間、ファイルI/O時間などなど。


そうですね。
性能の劣化と、XMLを扱う部分を作るための工数(人件費)と、変更のし辛さ等を考えればメモリを追加してセッションを使う方がなんぼかマシだとおもうんですけど。

実際の運用の時に予想されるサーバーの負担というのはどれくらいのものなんでしょう。
セッションを使わない時と比べてレスポンスが10秒も20秒も遅くなったり、あるいはレスポンスが返ってこなくなってしまったりするんですか?

それとも却下している人は、「メモリをいっぱい使ってサーバーに悪そう」などといったイメージでセッションを使うなと言っているんでしょうかね。

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

>Jittaさん
あ、XMLを扱う部分は作る必要ないんだ。
でも「どこのページの状態はどういった名前でどこに保存して」と、煩わしいことには変わりないでしょうけど。

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-02-12 15:59 ]
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-12 16:15
皆様ありがとうございます。

なんだかSessionが無難な気がしてきました。
自分一人で作るのであればセッションを使うことにします。

XMLが絶対必要になった際にまたお願い致します。。。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-12 16:32
簡単ですがサンプルおいておきます。
まずいところがあったらツッコミお願いいたします。

コード:

// データセット復元
private DataSetCheck GetDataSet()
{
	DataSetCheck dataSet = null;

	// セッションから取得する場合
	if( Session["DataSetCheck"] != null )
		dataSet = (DataSetCheck)Session["DataSetCheck"];

	// XMLから取得する場合
	dataSet = new DataSetCheck();
	string xmlFileName = string.Format( "{0}.xml", Session.SessionID );
	dataSet.WriteXml( Server.MapPath( xmlFileName ) );

	return dataSet;
}

// データセット保存
private void SetDataSet( DataSetCheck dataSet )
{
	// セッションに保存する場合
	Session["DataSetCheck"] = dataSet;

	// XMLに保存する場合
	string xmlFileName = string.Format( "{0}.xml", Session.SessionID );
	dataSetMain.WriteXml( Server.MapPath( xmlFileName ) );
}

// 移動ボタンクリックイベント
private void ButtonMove_Click(object sender, System.EventArgs e)
{
	DataSetCheck dataSet = new DataSetCheck();

	// データセットにチェックボックスの状態を保存

	// データセットを保存
	SetDataSet( dataSet );

	// 詳細画面に移動
}

// データグリッドにデータをバインド
private void BindDataGrid()
{
	// データグリッドにデータをバインド
	DataGrid1.DataBind();

	// データセットを読み込む
	DataSetCheck dataSet = GetDataSet( dataSet );
	
	// データセットに格納されているチェックボックスの内容を復元
	if( dataSet != null )
		
}

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-12 16:51
引用:

一郎さんの書き込み (2004-02-12 15:55) より:

セッションを使わない時と比べてレスポンスが10秒も20秒も遅くなったり、あるいはレスポンスが返ってこなくなってしまったりするんですか?

あ、XMLを扱う部分は作る必要ないんだ。
でも「どこのページの状態はどういった名前でどこに保存して」と、煩わしいことには変わりないでしょうけど。


 そんなに遅くなることはないと思いますが。。。

 えっと、私のところでは、検索条件を個人個人で作ることができるようにしています。そして、その条件を「名前を付けて保存」できるようにしています。これは、XMLファイルに保存しています。ファイルは、Win32APIを使って、All Usersディレクトリを得、Application Dataからずっと下に、フォーム認証で得た「ログイン者名」を利用して保存しています。保存にはXMLシリアライズ(SOAPシリアライズ)ではなく、バイナリシリアライズのXMLシリアライズを使用しています(他のスレッドで調査した結果を流用している)。

 今のところ、“著しい性能の劣化”は感じていません。問題は多数のアクセスがあったときに待ちが発生するか、ということだと思いますが、社内利用のシステムなので同時アクセス数も100未満であり、個人ごとにファイルが分かれる“はず”なので、「待ち」と言うほどの待ちは発生しないと思っています。

 SOAP/XMLシリアライズは、調べたけれども忘れてしまいましたが(歳かのう...)、バイナリシリアライズは
 ・クラスにSeliarizable属性を付ける
だけで“基本的には”実装できます。バージョンアップで項目が増えることに対応するため、シリアライズ、デシリアライズを実装していますが、そんなに手間ではありません。
#XMLの中にアセンブリのバージョンが入るので、実は困るかもしれない
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-12 19:51
仕様変更により次回ログイン時にユーザIDによってチェックボックスの情報提供を行うことになりました。
つまり、XMLを使うということですね。

行き詰まったら、またご伝授ください。
宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)