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

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

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

全過去ログを検索

<< 0 >>
■46482  Re[2]: DetailsViewでの編集制御
□投稿者/ もりお -(2010/02/03(Wed) 16:47:39)
    No46467 (ゆらり さん) に返信
    
    > MasterPageを使用しないと正常に動作します。
    
    MasterPage を使用するときも使用しないときも
    Dim textBox = DirectCast(DetailsView1.FindControl("Code"), TextBox)
    textBox.BackColor = Drawing.Color.Silver
    textBox.ReadOnly = True
    の処理に変わりはないのですよね。
    そうすると処理前の過程、処理後の過程が気になります。
    処理をどこに記述して、どのように呼び出しているのでしょうか。
    TextBox のプロパティをセットしてから変更が反映されないことを確認するまでの間、他
    の処理は行われていないでしょうか。
    
    たとえば
    
    MasterPage にメソッドを用意して
    [Site1.Master.vb]
    Public Sub DisableEdit()
        Dim textBox1 As TextBox = DirectCast(DetailsView1.FindControl("TextBox1"), TextBox)
        textBox1.BackColor = Drawing.Color.Red
        textBox1.ReadOnly = True
    End Sub
    
    WebForm のボタンクリックで呼び出す
    [WebForm1.aspx.vb]
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        DirectCast(Master, Site1).DisableEdit()
    End Sub
    
    といったことをお教えいただけるとありがたいです。
    
記事No.46459 のレス /過去ログ79より / 関連記事表示
削除チェック/

■52562  Re[3]: COM のキャストについて
□投稿者/ 渋木宏明 -(2010/08/15(Sun) 09:36:32)
>
    2010/08/15(Sun) 22:53:28 編集(投稿者)
    2010/08/15(Sun) 10:27:25 編集(投稿者)

    >手を抜くのはサーバーの実装まで理解できてから。ということですね。

    「本来は間違いだけど、動くこともある」の方が正確かもしれません。
    まぁ、ほぼ反則です。
記事No.52555 のレス / END /過去ログ88より / 関連記事表示
削除チェック/

■53003  WebClient.UploadValuesの動作がおかしい
□投稿者/ ちょ〜し -(2010/08/31(Tue) 22:02:06)

    分類:[C#] 

    2010/09/01(Wed) 13:02:19 編集(投稿者)
    2010/09/01(Wed) 13:02:12 編集(投稿者)
    2010/08/31(Tue) 22:10:00 編集(投稿者)

    はじめまして。
    下記の環境でネットワークプログラムを組んでいる者です。

    OS:WindowsXP(SP3)
    エディタ:Visual Studio 2008
    言語:C#(.NET Framework 2.0←インストールされているのは3.0です)

    PHP:5.2.13

    htaccessでBasic認証が掛かっているPHPファイルに対してWebClient.UploadValuesを行った所、
    $_POST、$_GET共にデータがなく、$_SERVER["REQUEST_METHOD"]にデータが入力されていました。
    var_dump($_SERVER)を行うとこのような感じです。

    array(29) {
    中略
    ["REQUEST_METHOD"]=>
    string(11) "abc=defPOST";
    }

    Basic認証を外すと問題なく動作します。
    ブラウザからフォームで送信した場合も全く問題ありません。

    htaccessが問題なのでしょうか?
    色々試してみたのですが、401や500エラーになってしまうだけでうまく動作しません。

    ご教授宜しくお願いします。

    以下ソースです。

    ----------------
    C#
    ----------------
    using(WebClient wc = new WebClient()) {
    wc.Credentials = new NetworkCredential("ユーザ名", "パスワード");
    NameValueCollection values = new NameValueCollection();
    values.Add("abc", "def");
    string str = Encoding.UTF8.GetString(wc.UploadValues("http://*****.com/test.php", values));
    MessageBox.Show(str);
    }

    ----------------
    .htaccess
    ----------------
    Options -Indexes

    <Files ~ "^\.(htaccess|htpasswd)$">
    deny from all
    </Files>
    AuthUserFile /home/***/.htpasswd
    AuthGroupFile /dev/null
    AuthName "password"
    AuthType Basic
    Require valid-user
    order deny,allow

    ----------------
    PHP
    ----------------
    <?
    var_dump($_SERVER);
    ?>
親記事 /過去ログ89より / 関連記事表示
削除チェック/

■83259  Re[2]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 金尾 -(2017/03/15(Wed) 21:44:28)
    確かに、100GBのファイルをコピーしようとすると10分くらいかかってしまいます。

    しかし、VB.NETで
    Dim str() As String = Encoding.UTF8.GetString(bs).Split(CChar(vbCrLf))

    の部分をコメントアウトし、
    バイト配列→ストリング配列の処理を行わなければ
    1分くらいで処理が完了するのですが
    これはなぜでしょうか?

    配列が空になっているのではないかと思い
    if bs(filesize -1000)= 0 then msgbox ""
    みたいなのも入れてみましたが
    配列にはデータが格納できているみたいです
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/

■83262  Re[3]: 大量のテキストファイル
□投稿者/ Azulean -(2017/03/15(Wed) 22:52:00)
    2017/03/15(Wed) 22:54:07 編集(投稿者)

    No83261 (金尾 さん) に返信
    > メモリがボトルネックになっているかどうかは
    > どのようにすれば調べられますでしょうか?

    ストレージの影響ではないと仮定しても、メモリのスピードの影響だと言い切るのは弱いと思いますね。
    (仮にメモリのスピードの影響だとしても、それはマルチスレッドにしたところで改善しないので、打つ手なしなので建設的ではありません…)
    というより、たいていはストレージよりもメモリの方が速いはずなので、「メモリ(のアクセススピード)がボトルネックである」という仮定をしたり、調べたりすることがありません。

    巨大な配列の確保・解放を繰り返した場合、スワップが発生する、ページフォールトが起きるといった意味ではメモリ・ストレージ間のデータ転送待ちになることはよくあります。
    それが起きている場合、タスクマネージャーの詳細タブでページフォールトの数が勢いよく上がるはずなので、それで観測できるかもしれません。
    それが要因の場合は、メモリの確保・解放を繰り返さない、それでも発生するならメモリ確保量・処理量を見直すってことになると思います。


    No83259 (金尾 さん) に返信
    > しかし、VB.NETで
    > Dim str() As String = Encoding.UTF8.GetString(bs).Split(CChar(vbCrLf))
    >
    > の部分をコメントアウトし、
    > バイト配列→ストリング配列の処理を行わなければ
    > 1分くらいで処理が完了するのですが
    > これはなぜでしょうか?

    「バイト列を UTF-8 と解釈して String にする処理」と「改行ごとに区切った String 配列を生み出す処理」が時間かかるってことでは。
    前者が遅いのか、後者が遅いのかは、Split なくしたコードを実験すれば切り分けられるかと。


    ところで、Split は配列を生み出すので、そういう意味だとループの中で確保・解放を助長していることになります。
    10MB のテキストというと、かなりの分量でしょうから、それを 1 万ファイルとなると、メモリの確保・解放による処理のロスは大きいかもしれませんね。
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/

■83268  Re[3]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 魔界の仮面弁士 -(2017/03/16(Thu) 04:43:55)
    No83259 (金尾 さん) に返信
    > CChar(vbCrLf)
    これは ControlChars.Cr と同義ですが、本当にそれで良いのでしょうか。
    CR + LF ではなく、CR で分割していることになりますが…。


    > Dim str() As String = Encoding.UTF8.GetString(bs).Split(CChar(vbCrLf))

    パフォーマンスの検証とするならば、このようにまとめて書くのではなく、
    ・GetString メソッドの実行時間
    ・Split メソッドの実行時間
    のように、各メソッドごとに調べるべきかと思います。

    処理的には Split の方が時間がかかりそうですね。
    以下、当方環境での実験結果。


    '検証用の 10MB のダミー配列
    Dim bin10MB(10 * 1024 * 1024 - 1) As Byte
    For n = 0 To bin10MB.GetUpperBound(0)
    bin10MB(n) = &H2A
    Next
    For n = 10 To bin10MB.GetUpperBound(0) Step 255
    bin10MB(n) = 13
    Next

    'GetString および Split の速度調査
    Dim a = Now
    Dim str10MB = System.Text.Encoding.UTF8.GetString(bin10MB)
    Dim b = Now
    Dim aryLines = str10MB.Split(ControlChars.Cr)
    Dim c = Now

    Console.WriteLine((b - a).TotalSeconds) '0.0110029 〜 0.0139725
    Console.WriteLine((c - b).TotalSeconds) '0.0369978 〜 0.0409782

    上記は単一回の実行ですが、ループ処理で複数回連続で呼び出す場合は、
    前回のループ処理で使われていた String 配列(≠Byte 配列)が破棄される分のコストも
    もしかしたら足かせになってくるかもしれません。



    No83261 (金尾 さん) に返信
    > すいません、上記のコードは分かりやすく書き換えたものです
    処理は単純化してもらった方が良いですが、実際のコードとあまりに異なっていると、
    第三者が試したときに結果がブレてしまい、むしろ分かりにくくなる恐れがありそうです。


    ところで、最初の質問にあった ReadLine だったものを並列化したいという話だけなら、
    パフォーマンスはさておき、ReadLine のままで並列化できるようにも思うのですが、
    何故 ReadLine を使わない方法に変更されたのでしょうか?

    全バイナリの一括読み取りなら File.ReadAllBytes の方がスマートに書けそうですし、
    テキストファイルから「内容をまとめたデータ」を作成するための処理というのが、
    行単位の順次読み取りで済むのであれば、わざわざ自前で Split して配列化せずとも、
    File.ReadLines メソッドで十分であるような気もするのですが。

    もしかして、FileAccess 等の制御をしたいが故に FileStream を使っているということなのでしょうか。
    それとも、System.IO.File の静的メソッドだと、エラーになったとか、極端に遅くなるなどの
    何かしらの弊害があって現状のコードになったのでしょうか。
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/

■95035  Re[1]: テキストエディター タブの保持
□投稿者/ 魔界の仮面弁士 -(2020/06/16(Tue) 22:46:57)
記事No.95034 のレス /過去ログ164より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -