C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.69876 の関連記事表示

<< 0 >>
■69876  BinaryFormatterを使ったデシリアライズの高速化
□投稿者/ あしゅ -(2014/02/05(Wed) 04:37:47)

    分類:[.NET 全般] 

    現在以下のようなデータをシリアライズして一つのファイルとして保存しています。
    (System.Runtime.Serialization.Formatters.Binary.BinaryFormatterを利用)
    ファイルが大量にあるための一覧を表示するプログラムを作成していました。

    [Serializable]
    public class MyClass
    {
    public string titile;
    public byte[] data;
    }

    dataのサイズが大きいためtitleの部分だけ取得し一覧を作成、クリックしたら全データを作成しようと考えました。
    SerializationBinderを利用して実装してみたのですが(titleだけを所持したクラスを作成して流し込んでみた)
    結果としては逆に遅くなってしまいました。

    一度シリアライズしたデータから目的の部分だけ抜き出すことで高速化するという実装には無理があるのでしょうか?
    詳しい方のご意見を頂けると嬉しいです。
親記事 /過去ログ119より / 関連記事表示
削除チェック/

■69877  Re[1]: BinaryFormatterを使ったデシリアライズの高速化
□投稿者/ yo -(2014/02/05(Wed) 05:49:24)
>
    No69876 (あしゅ さん) に返信
    > 現在以下のようなデータをシリアライズして一つのファイルとして保存しています。
    > (System.Runtime.Serialization.Formatters.Binary.BinaryFormatterを利用)
    > ファイルが大量にあるための一覧を表示するプログラムを作成していました。
    >
    > [Serializable]
    > public class MyClass
    > {
    > public string titile;
    > public byte[] data;
    > }
    >
    > dataのサイズが大きいためtitleの部分だけ取得し一覧を作成、クリックしたら全データを作成しようと考えました。
    > SerializationBinderを利用して実装してみたのですが(titleだけを所持したクラスを作成して流し込んでみた)
    > 結果としては逆に遅くなってしまいました。
    >
    > 一度シリアライズしたデータから目的の部分だけ抜き出すことで高速化するという実装には無理があるのでしょうか?
    > 詳しい方のご意見を頂けると嬉しいです。

    情報ありがとうございます。
記事No.69876 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69899  Re[2]: BinaryFormatterを使ったデシリアライズの高速化
□投稿者/ あしゅ -(2014/02/07(Fri) 17:36:20)
    質問したらお礼されるというよく分からない状況です。
記事No.69876 のレス /過去ログ119より / 関連記事表示
削除チェック/

■69959  Re[1]: BinaryFormatterを使ったデシリアライズの高速化
□投稿者/ shu -(2014/02/13(Thu) 12:53:36)
    No69876 (あしゅ さん) に返信

    ファイル名に自由度があれば
    ファイル名のそのTitleの内容を含めてしまうという方法も
    ありかと思います。

    ファイル名に自由度がなければ
    別にインデックス用ファイルとしてTitleとファイル名を対応付けする内容を
    持ったファイルを作成しておくということで改善される可能性があります。
    このファイルの内容は可能であれば固定長で情報をもつようにして1つ1つの情報に
    アクセスするのに固定位置を指定できる構造にしておくとなお良いと思います。

記事No.69876 のレス /過去ログ119より / 関連記事表示
削除チェック/

■70170  Re[2]: BinaryFormatterを使ったデシリアライズの高速化
□投稿者/ tocs -(2014/02/26(Wed) 21:58:47)
>
    > ■No69876 (あしゅ さん) に返信

    私も大量のデータファイルから検索処理を高速化させたことがありますが、
    高速化の鉄則はボトルネックの評価ですので、まずStopWatchで各部の処理時間を計測する必要があると思います。
    私の場合データがFileServerにあることで通信による速度低下も原因ではあったのですが、
    ファイルオープン・クローズがその約10倍遅いボトルネックでした。

    shuさんが記載されている
    > 別にインデックス用ファイルとしてTitleとファイル名を対応付けする内容を
    > 持ったファイルを作成しておくということで改善される可能性があります。

    はその通りで、ファイルオープンせずに得られる[ファイル更新日時], [ファイル名], [ファイルサイズ]および検索対象のデータの
    コレクションを1つのファイル(=インデックスファイル)として保存し、検索時には更新日時などが変化されていなければ
    ファイル内の検索対象データを使うというものです。考え方はただのキャッシュです。

    http://jeanne.wankuma.com/tips/csharp/file/gettimestamp.html

    難しい実装にもならないのでボトルネックがオープンクローズにあるならおすすめの方法です。
記事No.69876 のレス /過去ログ119より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -