スキップしてメイン コンテンツに移動

.NETのシリアライズに関して

DataTableをsessionに突っ込んでいた。
Ajaxでリクエストされた処理内でそんな処理がありちょいとハマる。

Azureの場合、sessionへの値の格納は、
実装したコードの処理が全て実行された後に、
Azure上のキャッシュに格納しようとする為、そこでエラると、しかもAjaxだと
検知しにくい。
➡ Grobal.aspx.vbにロギングの処理を実装して未処理エラーを拾うべし。
未処理のエラーが発生し、クライアントサイドが通信を打ち切り
通信を打ち切られたサーバサイドがシステムエラーをはく。
エラーの場所を特定しさあ本題が待ってました。

DataTableをsessionに入れようとしてタイムアウトになっていました。
これまでは発生しなかった現象でしたが、DataTableの容量が増えた際に発生しました。
DataTableのサイズはおよそ9M
10Mbps の回線なら、1秒で転送するはずなので、
容量が問題とは考えにくい。

色々ためした結果、
シリアライズの速度がネックなんじゃないかという推論に落ち着きました。
つまりDataTableをシリアライズするのはやたら時間がかかるという事。
結果的にほぼ同じサイズのデータがXElement または Stringの場合は、すんなりsessionに格納できました。

Azureのキャッシュに値を格納するためにAPIを実行すると、おそらく
シリアライズしながら逐次的にAzure上のサーバに転送をしているのではないかと思う。
XElementの場合は、中身は「XElementオブジェクトとその子要素」と断定的で静的に近い形になっているため、シリアライズの処理内での判定が早いのでは?
また、Stringの場合のシリアライズもほぼそのままの形なのでは?

それに比べ.NETのDataTableには、行に対して動的にオブジェクトを突っ込む事もできる。行のカラム毎に型情報を持っていて汎用的な構造になっているので、
きっとシリアライズにはもの凄く時間がかかるじゃない?
っていう話でした。

ちなみに、.NETではシリアライズの方法がいくつか提供されているようです。
また、Xml形式のデータでは、値をattributeに格納すると高速化するようです。

データ量が増えて発生する問題にはいつも悩まされます。


コメント

このブログの人気の投稿

iphone アプリ 「RPS」を使ったテザリング

■iphone アプリ 「RPS」を使ったテザリング。 先ずは、Mac と iPhoneのアドホック接続します。 アドホック接続とは、端末同士の接続という意味です。 ①  Wifi のマークをクリック。 すると「ネットワークの作成」があるのでクリック。   ②  「RPS」というネットワーク名で新規作成します。 ③ System Preferences の Network をクリック ④ Advanced.. をクリックし 「TCP/IP」タブを選択 ⑤ IPv4 Adress に 13.37.13.10 と入力する。 ⑥ Subnet Mask に255.255.255.0 と入力する。 ⑦ iPhone の設定で Wifi の設定を行う。 先ほどMacで作成したネットワーク「RPS」が 表示されるので選択する。 ⑧ iPhone で 「RPS」を起動。 はさみ、石、紙の順にタップした後に左上をタップする。 ⑨ Tethering を 「ON」にする。 すると IP Addressが表示されます。 ⑩ ③④の手順で Proxies タブを開き、 左側のリストの「SOCKS Proxy」にチェック。 そして右側のSOCKS Proxy Server の IP Address に ⑨で表示された IP Address 「169.254.250.25」 と ポート番号 「1080」を設定する。 OK をクリックし、Apply をクリックするとその時点から Tethering が始まる。 来年からは正式なテザリングサービスが始まるので、 そうしたら、 RPSもいらなくなりますね。 ※本記事は著者のメモです。一切の責任は負いかねます。 ※ 理由は調査していませんが、テザリング時、skypeはつながらないです。

SVNでロールバック

たまにしかやらないのでいつも思い出せない。 今日はメモっておこう。 作りきってリリースするつもりだったので 作成途中でソースを大量にコミット。が、 割り込み作業やら、スケジュール変更やら何やらで、 まだ完成してないのに、今すぐSVNのソースをWebサーバに適用せねばならないシチュエーション、たまにそんな事ありませんか? しかも他の人が修正した分だけ適用しなきゃならん状況です。  もちろん、現状、Trunkには僕の作成中のソースもたくさんあがっているからそのソースだけ除外して、それ以外をWebサーバに適用するのです。面倒きわまりない! ① コマンド svn log で表示したコミットログを目視で確認しながら、あげちゃぁだめよのソースをピックアップ。 svn log -v -r1234:HEAD ※ rev1234が自分が手を入れる直前のrevision  これだとすべてのログがでるので自分の物だけにしぼるため、 テキストに吐き出そう。  svn log -v -r1234:HEAD > svnLog.txt  そして、自分のコミット以外の情報を除去。svn log って名前で絞り込むオプションってないのかしら? ② ①でピックアップしたソースが自分がコミットした後に他のメンバーがコミットしていないか確認。  面倒だけど、ファイル一個ずつ svn log でコミットログを確認。 svn log -r1234:HEAD /aaa/bbb/file.php ここで他のメンバーの名前が出てきたら、revision をメモっておく。 ※次に行う作業でローカルのソースが上書きされるのでバックアップをとっておく。  ➡他のメンバーも直していたら、svn merge ③へ ➡自分だけが直していたら、svn export ④へ ③rev 1235 で僕が直していて、rev 1239 で他のメンバーが直していたら、  svn merge -r1235:1234 /aaa/bbb/file.php これで1235 の変更が 1234 に戻ります。 こうすると1239の変更は戻ったりしません。 ④rev 1236 , 1240 で自分だけが直している場...

Hard days holiday !!

幼子を育てる世の中の母達は本当に偉大だと思う。 子供は、大人を幸せにする宝の様な存在だが、 大人を疲れさせるスペシャリストでもある。「大変と充実は比例する」のだが 大変な最中は大変なのだ。そんな事を考える余裕はない。 幼児は基本的にされると困る事をする。 「それだけはしないで」と言う事をする。例えば、 電車の中で奇声を発する。 人ごみのなかで姿をくらます。 こちらの疲れがピークの時に泣く。 一度泣くと泣き止まない。 そしてベビーカーがないのに寝る。 こける。 外でハイハイする。 立ち入り禁止の場所に入りたがる。 車が走っている道路へダッシュする。 目立つ事をする。 こぼす。 油まみれの手で触ってくる。 etc  つまり、すごく大変なのです。 そんな子供達を相手にしながら、マルチでアレもこれもこなす ママさん達は本当にすごい。 涼しい顔でサポートするママさんのママさんもすごい。貫禄を感じる。 そして、今日思った事は、同時にパパさんもすごいという事だ。 ママさんの手足になり、まさに「問答無用」の嵐を今日も受けて立つ。 人類の「宝」の守り神は「母」なのです。パパは本能的にそれをわかっているので すべてぐっと飲み込むのです。偉いのです。 パパさんも偉大なのです。 陰の戦いです。労い、賞賛、ご褒美などあまり有りません。 健気です。 大事なのは、これを糧にできる器と、 ストレスを溜め込まない賢さです。 でも、たいてい子供の寝顔が全て帳消しにしてくれるのです。 連休などは、全国どこでもこんな感じですよ。きっと。 吹奏楽の演奏会を鑑賞。 エグザンティアのタイヤを履き替えました。 306のタイヤをはいてみました。なかなかいいねぇ。 スポーティーな感じもたまにはいいかもね。 都内某所で奇跡の並列駐車。