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

.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はつながらないです。

MacBook Pro 15-inch, Mid 2010. Change Strage

メモリを8Gに増やした次の日にHDDをSSDに交換したのに、 忙しくて書けなかった。 今日こそは書く。 えーっと。思い出せない。 そうそう。物はメモリと同じ SAMSUNG にしました。 色々見た結果速度も早いし、メモリと同じメーカーという事で決めました。 値段はソフマップが一番安かった。 SSD は Solid State Drive の略名で HDDと比べるとほとんどメリットしかない。 寿命が短いらしい事と値段が高い事が唯一のマイナス要素だけど 使い始めるともうHDDには戻れないです。 1、2年後にはHDD搭載のPCは店頭から消える気がする。 交換に関する情報はたくさんあり、それほど大変ではなかった。 ちなみに、この度の交換にあたり、シリアルATAという言葉を覚えた。 HDDやSSDを接続するためのインターフェースの規格。 記憶が確かなら僕のマックはSATA2.0 で最大通信速度が3G/秒だったと思う。 SATA3.0という規格もあるらしく、こちらは最大通信速度が6G/秒だったと思ふ。 購入した SAMSUNGのSSD ( MZ-7PC128B )の仕様は、SATA 6G/s 、 最大読込速度 520MB/s 最大書込み速度 320MB/s という情報があったので、 秋葉館に質問電話をしたところ、 「 SATA2.0のPCにも使う事ができるが、速度は半分になると考えてくださって結構です。」 と迅速かつ丁寧に答えくれたその声から、 自信とプライドを持ち合わせているスタッフさんであると感じる事ができた。 driveを固定していた部品をはずしHDDを取り出す。 ⇩SAMSUNGのSSD ( MZ-7PC128B )の裏側。 ⇩SAMSUNGのSSD ( MZ-7PC128B )の表側。 ⇩SAMSUNGのSSD ( MZ-7PC128B )を装着。 ⇩SAMSUNGのSSD ( MZ-7PC128B )を固定用パーツで固定。 バックアップの復元の方法もたーくさん情報あ...

Safari 6 Webインスペクタ

safari を 6 にバージョンアップしたら、 結構使い勝手が変わってるので最初は戸惑いましたが、 ようやく普通に使えるようになってきた。 よく使う機能だけまとめます。 ■ 一番最初にやっておいた方がよい事。 ➡ スクリプトのデバッグを止める。  デフォルトで、All Exceptionsのタグみたいなマークが「On」の状態(濃いブルー)になっているので、「Off」の状態(淡いブルー)にする。⬇写真参照 こうしておかないとスクリプトエラーがあった場合に問題箇所でブレークして画面の読み込みが終わらない。 ■ 続きまして、使用頻度の高いものとしてコンソール。 左の吹き出しをクリックし、Current Log を選択すると右側に コンソールエリアが出ます。 ここで、console.log()でデバッグした値が見られます。 ■ あと、サーバからのResponse 情報はよく見ますね。 左側にある「時計」マークをクリックすると Network Request が出てきます。それを選択し、「Recording ◯ 」をクリックすると リクエスト、レスポンスの記録を取ります。 Name の列にリクエスト情報が表示されます。 ここをクリアしたい場合は、「Recording ◯ 」をクリックして記録を止め、再度クリックして記録をスタートさせます。そうするとクリアされます。 Name 列のリクエスト情報にマウスオーバすると➡マークが出るのでそれをクリック。 そうするとResponse情報が見れます 。 Ajaxで通信してる時など便利ですよね。 ■ 要素の検証 左側の「書類」をイメージさせるマークをクリックしすると下に現在のページのURLが あるのでそれを選択する。 するとHTMLが表示されHTMLソースの右上に「人差し指をたてた」様なマークがあるのでそれをクリック。 そうすると画面上で要素を選択できる。 CSS情報の見え方は旧バージョンの方が全然よかった。 現状では、CSSのファイル名などをスタイル情報と一緒に右側のエリアに表示する方法が分からないー。