StreamReaderからの検索/読み取りを高速化

リキ

FTPサーバーに存在するファイル名のリストをダウンロードしようとしています。すべての名前を取得したら、StreamReaderオブジェクトを使用してすべてのファイル名を検索し、そこに存在するファイルに含まれるサブストリングの存在を確認します。 ftp。

たとえば、ファイル名が次のような場合

0000730970-0633788104-20140422073022-0633788104.PDF

0000730970-0633789720-20140422101011-0633789720.PDF

0000730970-0633798535-20140425075011-0633798535.PDF

0000730970-0633798536-20140425075011-0633798536.PDF

0000730970-0633804266-20140428124147-0633804266.PDF

0000730970-0633805880-20140429065011-0633805880.PDF

「0633798535」を検索します(ダッシュで区切られた2番目または最後の部分文字列。FTPに存在するファイルに関する情報はこれだけなので、完全なファイル名はわかりません)。これを行うために使用している以下のコード

try{
browseRequest = (FtpWebRequest)FtpWebRequest.Create(ftpAddress);

browseRequest.Credentials = new NetworkCredential(username, password);
browseRequest.UsePassive = true;
browseRequest.UseBinary = true;
browseRequest.KeepAlive = true;

browseRequest.Method = WebRequestMethods.Ftp.ListDirectory;
response = (FtpWebResponse)browseRequest.GetResponse();
responseStream = response.GetResponseStream();

if (responseStream != null)
{
    using (StreamReader reader = new StreamReader(responseStream))
    {
        while (!reader.EndOfStream && !isDownloaded)
        {
            string fileName = reader.ReadLine().ToString();
            if (fileName.Contains(subStringToBeFind)) //search for the first encounter
            {
                //download the file
                isDownloaded = true; //initially false
            }
        }
    }
}
}

ここでは、シーケンシャル検索を使用してファイル名を見つけています。しかし、問題は、ファイルの量が多いと検索が遅くなることです。たとえば、82000のファイル名の場合、最後のファイルを検索する場合、検索に2分ほどかかります。このため、アプリケーションは低速です。だから、私は検索を加速するために助けが必要です。検索時間を改善するためにバイナリ検索または他の何かを使用する方法はありますか?

ジョンスキート

バイナリ検索を使用できるのは、すでにすべてのデータがある場合(および、データがソートされている場合、ここにあるように見える場合)のみです。ここで方法はボトルネックではないのではないか強く思いContainsます。データ転送であると思います。私は3つの変更を加えますが、それはすでにかなり効率的であるように見えます。

  • を使用するのではなく、入力の最後にReadLine()戻るという事実を使用しますnullEndOfStream
  • ReadLine()戻るように宣言されているファクトを使用しstringます-を呼び出す必要はありませんToString(これはパフォーマンスを損なうことはありませんが、醜いです。)
  • using応答と応答ストリームにステートメントを使用します。using読者のためのステートメントがあるので大丈夫かもしれませんが、応答自体のために少なくとも1つは必要です。

そう:

string line;
while (!isDownloaded && (line = reader.ReadLine()) != null)
{
    if (line.Contains(target))
    {
        isDownloaded = true;
    }
}

呼び出しではなくネットワーク本当に問題であることを検証するには、Contains2つを分離してみてください(診断目的のためだけです。実際にはこれを実行したくないので、すぐに停止できるようにしたいからです。ファイルが見つかりました):

  • すべてのファイル名を取得し、ファイル(またはメモリ)に保存します
  • ファイル名を検索する

両方のステップの時間を計る-最初のステップがほとんど常にかかっていることに気づかなかったら、私は驚かれることでしょうを使用して82000文字列を検索するContainsと、非常に高速になります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

openpyxlの読み取りを高速化

分類Dev

InputStreamからの読み取りとFileOutputStreamを使用した書き込みの高速化

分類Dev

ファイルからのいくつかの読み取りを高速化するAndroidの方法

分類Dev

Pythonでのデータ読み取りを高速化しますか?

分類Dev

組み込みLinux:シリアルポートからのバイトの読み取りが遅すぎて転送を高速化できない

分類Dev

PythonはExcelファイルの読み取りを高速化します

分類Dev

ファイルの読み取りとオープンを高速化

分類Dev

RでCSVファイルの読み取りを高速化する方法

分類Dev

Angular /Mvc.netからの画像の読み込みを高速化する方法

分類Dev

要素の検索を高速化

分類Dev

入力ストリームの読み取りを高速化する方法の最適化/連結速度の向上

分類Dev

リストの検索を高速化しますか?

分類Dev

openpyxlを使用してExcelファイルの読み取りと書き込みを高速化したい

分類Dev

パンダでファイルの読み取り/書き込みを高速化する方法はありますか?

分類Dev

Googleカレンダーの読み取り/書き込みを高速化/バッチ処理する方法はありますか?

分類Dev

30,000csvファイルの読み取りと操作の高速化

分類Dev

トランジェントは読み取り操作を高速化しますか?

分類Dev

パンダでのcsvファイルのこの条件付き行の読み取りを高速化しますか?

分類Dev

ファイルから方程式のリストを読み取って評価するときにPythonの評価を高速化する

分類Dev

GNU Octaveで大きなファイルの読み取りを高速化するにはどうすればよいですか?

分類Dev

巨大なファイルからの読み込みを高速化する方法(Java)

分類Dev

読み取り、文字列を検索してから、文字列を読み取ります

分類Dev

パターン検索をどのように高速化できますか?

分類Dev

カーマイケル数の検索を高速化しますか?

分類Dev

Mysqlクエリ検索を高速化

分類Dev

検索コマンドを高速化しますか?

分類Dev

値間の要素数の検索を高速化Matlab

分類Dev

SQL:複数の条件の検索を高速化

分類Dev

最初の一意の文字検索を高速化する方法

Related 関連記事

  1. 1

    openpyxlの読み取りを高速化

  2. 2

    InputStreamからの読み取りとFileOutputStreamを使用した書き込みの高速化

  3. 3

    ファイルからのいくつかの読み取りを高速化するAndroidの方法

  4. 4

    Pythonでのデータ読み取りを高速化しますか?

  5. 5

    組み込みLinux:シリアルポートからのバイトの読み取りが遅すぎて転送を高速化できない

  6. 6

    PythonはExcelファイルの読み取りを高速化します

  7. 7

    ファイルの読み取りとオープンを高速化

  8. 8

    RでCSVファイルの読み取りを高速化する方法

  9. 9

    Angular /Mvc.netからの画像の読み込みを高速化する方法

  10. 10

    要素の検索を高速化

  11. 11

    入力ストリームの読み取りを高速化する方法の最適化/連結速度の向上

  12. 12

    リストの検索を高速化しますか?

  13. 13

    openpyxlを使用してExcelファイルの読み取りと書き込みを高速化したい

  14. 14

    パンダでファイルの読み取り/書き込みを高速化する方法はありますか?

  15. 15

    Googleカレンダーの読み取り/書き込みを高速化/バッチ処理する方法はありますか?

  16. 16

    30,000csvファイルの読み取りと操作の高速化

  17. 17

    トランジェントは読み取り操作を高速化しますか?

  18. 18

    パンダでのcsvファイルのこの条件付き行の読み取りを高速化しますか?

  19. 19

    ファイルから方程式のリストを読み取って評価するときにPythonの評価を高速化する

  20. 20

    GNU Octaveで大きなファイルの読み取りを高速化するにはどうすればよいですか?

  21. 21

    巨大なファイルからの読み込みを高速化する方法(Java)

  22. 22

    読み取り、文字列を検索してから、文字列を読み取ります

  23. 23

    パターン検索をどのように高速化できますか?

  24. 24

    カーマイケル数の検索を高速化しますか?

  25. 25

    Mysqlクエリ検索を高速化

  26. 26

    検索コマンドを高速化しますか?

  27. 27

    値間の要素数の検索を高速化Matlab

  28. 28

    SQL:複数の条件の検索を高速化

  29. 29

    最初の一意の文字検索を高速化する方法

ホットタグ

アーカイブ