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

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

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

全過去ログを検索

<< 0 >>
■48621  Re[2]: SQLite利用について
□投稿者/ 倉田 智朗 -(2010/04/10(Sat) 02:05:24)
    No48620 (なちゃ さん) に返信
    > ReadMeに書かれてますよ。
    > http://sqlite.phxsoftware.com/readme.htm
    > の
    > Distributing The SQLite Engine and ADO.NET Assembly
    > On the desktop, only the System.Data.SQLite.DLL file needs to be distributed with your application(s).
    > …

    英語が読めない俺に隙はなかった。

    翻訳エンジンにぶち込んでみたら、SQLite.DLLファイルさえあればOKなのかな。

    話はそれますが、FirefoxがSQLiteを採用してから、DBファイルが膨れ上がったり、壊れるわで、全然幸せになってない気がするこの頃。
記事No.48619 のレス /過去ログ82より / 関連記事表示
削除チェック/

■68618  Re[8]: アクティブウインドウが変更されたときにイベントを発生させる
□投稿者/ とっちゃん -(2013/11/01(Fri) 11:23:24)
>
    No68614 (morimori さん) に返信
    > このようなクラスを作り、HashSetにデータを詰めて検索しようと考えました。
    > しかし、このままm_listPrintPtr.Contains(ptKey)で検索しようとしても
    > すべてfalseで帰ってきてしまいます。
    >
    > なにか工夫が必要なのでしょうか。

    PrintTable クラスのユニーク性の基準がわからないので、どういう工夫をすればいいのかわかりません。

    IntPtr ptr; は「何の」ポインタなのでしょう?

    String strTitle; は、おそらく描画するタイトルなのだと思いますが、PrintTable のサマリーなどから
    導き出せる答えがありません。

    まぁ、ここまでの流れから、おそらくは ptr == ウィンドウハンドルと思われますが...
    どこにもそれっぽいことが書かれていないので、ちょっとわかりかねます。

    とりあえず。。。
    HashSet<T>は T.GetHashCode(), T.Equals() の2つのメソッドを使って、オブジェクトの一意性を保ちます。
    見た感じ、用意していないようなので、Object.GetHashCode(), Object.Equals()が使われていると思われます。
    PrintTableは、参照型なので

    var pt1 = new PrintTable;
    var pt2 = new PrintTable;
    pt1.ptr == pt2.ptr && pt1.strTitle == pt2.strTitle

    が成立する状況でも

    pt1.GetHashCode() == pt2.GetHashCode()
    pt1.Equals(pt2) == true

    は成立しません(実験してみるとわかります)。

    これを成立するようにすれば、解決しますよ。

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

■75573  Re[6]: C#についての質問です。
□投稿者/ ぽん吉 -(2015/04/08(Wed) 17:54:32)

    if
    (value71 == 1)
    {
    //1
    byte[] bytes = new byte[24];
    IntPtr ptrBytesReaded;


    textBox1.ResetText();
    for (int cnt = 0; cnt <= 200; ++cnt)
    {
    int pointer = cnt * 4;
    ReadProcessMemory(ProcessHandle, (IntPtr)sso1 + pointer - 6, bytes, 4, out ptrBytesReaded);

    int value31 = BitConverter.ToInt32(bytes, 0);//
    if (value31 != 0)
    {
    string enemyname = GetEnemyName(cnt);
    textBox1.AppendText(Environment.NewLine + cnt.ToString("X") + (",") + value31.ToString("X4") + (",") + enemyname);
    }

    こちらのソースが、テキストに表示する部分なのですが、ここがフリーズする原因なんでしょうか?
記事No.75544 のレス /過去ログ127より / 関連記事表示
削除チェック/

■83272  Re[2]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 金尾 -(2017/03/16(Thu) 09:39:54)
    Azuleanさん

    > 配列の中の文字数を調べてみていって、何文字くらいになっているか、数量を適当に量ってください。
    もちろん数量のはかり方は分かるのですが
    そのはかった数量をどのようにして共有したら良いのか分からないのですが
    Split関数では生成した配列をそのままコピーされますので
    前回使用した配列のサイズなどは流用できないと思うのですが
    どのようにすれば良いですか?

    魔界の仮面弁士さん

    > 何故 ReadLine を使わない方法に変更されたのでしょうか?

    これは
    魔界の仮面弁士さん自身も仰っているように
    > しかし同一の物理ドライブ上にある場合は、マルチスレッドにすることで、
    > むしろ遅くなってしまう可能性が高そうです。

    これが起きるためです。
    SSDだとそれほど違いはないですがHDDでReadlineのコードをマルチスレッド化すると
    3倍くらい速度が落ちる結果が得られました。
    ストレージからデータをメモリに読み込む部分だけは
    シングルスレッドにしておき、
    読み込んだデータをストリング配列にする部分だけをマルチスレッド化しないと
    逆に速度が低下してしまいます。

    > の一括読み取りなら File.ReadAllBytes の方がスマートに書けそうですし
    実際にはファイルの全てを読み込む必要はなく、後半の8割程度のみが必要なためです
    File.ReadAllBytes だと、ファイルの一部のみを読み込むことができません。


    ニートプログラマさん

    > がある内容なので注目しています。えっとまずは
    > 本当にCPUを100%使えるのかを確認したらいかが
    > でしょう??


    マルチスレッドはこれまでに何度も作成していますので
    CPU使用率が100%になるのは確認でてきます


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

■83274  Re[3]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 魔界の仮面弁士 -(2017/03/16(Thu) 10:40:34)
    2017/03/16(Thu) 10:46:28 編集(投稿者)

    No83272 (金尾 さん) に返信
    > ストレージからデータをメモリに読み込む部分だけは
    > シングルスレッドにしておき、
    ストレージからの読み取りは、どうあっても 10 分間を要すると思っていたのですが、

    > 実際にはファイルの全てを読み込む必要はなく、後半の8割程度のみが必要なためです
    を実施していたために、実際にはそれより短い時間で処理できる目算ということなのですね。

    # 情報の後出し(というか、提示のサンプルと実際の処理との乖離)が他にもありそうな予感…。


    > Split関数では生成した配列をそのままコピーされますので
    > 前回使用した配列のサイズなどは流用できないと思うのですが
    > どのようにすれば良いですか?

    「何を目的として Split を使っているのか」を説明していただいていないため
    今回の事象に適合できるか分からないですが、元のコードの
     Encoding.UTF8.GetString(bs).Split(c)
    だと、「元のバイナリ」「それを文字列化したもの」「さらにそれを分割したもの」
    が必要なので、元データの約 3 倍のメモリを消費することになると思います。

    現状のこの、
      UTF-8 Binary → String → 改行単位の String()
    という変換処理を見直して、
      UTF-8 Binary → 改行文字の位置のみを列挙 → 必要な部分だけ随時 String 化
    という手順にすれば、消費メモリを 3 割程度削減できる気がします。


    データ量が多いので、手順が多少増えたとしても、メモリの破棄と再確保の
    頻度と総量を減らす方が、結果的に高速化に貢献するものと予想。
    (本当に高速化するかは、検証してみないと分からないですけれども)
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/

■83286  Re[12]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ Azulean -(2017/03/16(Thu) 12:36:40)
    No83272 (金尾 さん) に返信
    > もちろん数量のはかり方は分かるのですが
    > そのはかった数量をどのようにして共有したら良いのか分からないのですが
    > Split関数では生成した配列をそのままコピーされますので
    > 前回使用した配列のサイズなどは流用できないと思うのですが
    > どのようにすれば良いですか?

    私の共有は、変数やコードの話ではなく、金尾さんと、ここを見ている他の方との情報共有という意味で書いていましたのでご留意ください。
    処理量が第三者の予想のつかない数値になってたら話が通じない状態が続くので、それを懸念してです。

    No83284 (金尾 さん) に返信
    > HDDだと10%程度逆に遅くなってしまいました。
    >
    > ストレージの読み込みは律速していないと思ったのですが
    > なぜでしょうか?

    なちゃさんが途中で示唆されていたと思いますが、同じファイルの読み込みを繰り返すと、OS などによって、メモリにキャッシュされるので HDD と SSD の差がなくなるように見えることがあります。
    ただ、所詮はキャッシュなのでいつかはなくなり、ストレージの差が出ます。
    これは、マルチスレッドにしようと、メモリをどうしようとも変わりません。(打つ手がない)
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -