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

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

Mountain Lion に php の extension memcache をインストールする

memcacheしてみよう。 CentOS6 でmemcacheの仮想サーバをたてたので、 僕のMacでPHPを動かしてmemcacheサーバを利用する。 そのためにphpの拡張モジュールのmemcacheをインストールする。 memcacheは、pecl からインストールします。 PECLとは「The PHP Extension Code Library」の略で,C言語などで記述された拡張ライブラリです。 よく耳にする、一度は使ってみたいパッケージが結構あるです。 ちなみにPEARはPHPスクリプトによる拡張ライブラリです。  ① install-pear-nozlib.phar を実行して pear をインストール  cd /usr/lib/php/ php ./install-pear-nozlib.phar bash-3.2# php ./install-pear-nozlib.phar [PEAR] Archive_Tar    - installed: 1.3.7 [PEAR] Console_Getopt - installed: 1.3.0 [PEAR] Structures_Graph- installed: 1.0.4 [PEAR] XML_Util       - installed: 1.2.1 [PEAR] PEAR           - installed: 1.9.4 Wrote PEAR system config file at: /private/etc/pear.conf You may want to add: /usr/lib/php/pear to your php.ini include_path ②  php.ini に追記 cd /etc cp php.ini.default php.ini vim php.ini include_path = ".:/usr/lib/php/pear"  を追記 ③ アップデート pear channel-update pear.php.net pecl chan...

Hard days holiday !!

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