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

.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に格納すると高速化するようです。

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


コメント

このブログの人気の投稿

Cloudflareを利用して無料でSSLを導入する手順

Cloudflare、 簡単です。 アカウント登録 自分のサイトを登録 DNS設定 Cloudflare コンソール画面で設定変更 1. 以下のページからアカウント登録 https://dash.cloudflare.com 2. 自分のサイトを登録 入力フォームにサイトのURLを入力 3. ドメインのレジストラーのサイトにてネームサーバを登録 Cloudflare から提示されるネームサーバ名を、 レジストラーのサイトにて登録。 お名前.com の場合、 ネームサーバの設定 / ネームサーバの変更 / 他のネームサーバを利用 と進んで行き、 入力欄に入力し登録。 うまくいくと、 Cloudflareの コンソール画面で、Status: Active となります。 4 .     Cloudflare コンソール画面で設定変更 Crypto画面に移動し、SSLのタイプを Flexible SSLに変更 Flexible SSL はFULLに比べるとセキュリティは低い設定ですが、 すぐにSSLを導入できます。 同じ画面で Always use HTTPS と Automatic HTTPS Rewrites を ONに変更 最後に、DNS設定画面で、Statusを DNS only から DNS and HTTP proxy (CDN) に変更します。 雲のマークをクリックすると切り替わります。 これだけで、あなたのサイトがSSLで見ることができます!

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