1

次の構造の listArray があります。

listArray[0] insert_idlist = listArray (value, value, value, ect)

この配列には、各次元に約 2000 個の値が含まれています。

var string_list = "'" + string.Join("', '", insert_idlist[0]) + "'";
//var string_list = "'0169624'";

db クエリの目的で、上記のように最初の次元を文字列に連結しようとしています。ただし、展開するとプログラムがハングアップします。展開環境での以前の経験に基づいて、多数の値が原因であると思われます。

代わりにコメント行が有効になっている場合、コードは期待どおりに実行されます。

パフォーマンスを向上させる別の連結方法を提案できる人はいますか?

4

4 に答える 4

0

Table-Value Parametersを使用してリストを DB に渡すことができると思います。

これにより、そもそも連結の問題がないため、連結の問題が解決されます。

テーブル値パラメーターを使用すると、クライアント アプリケーションから SQL Server に複数行のデータをマーシャリングする簡単な方法が提供されます。データを処理するための複数のラウンド トリップや特別なサーバー側ロジックは必要ありません。テーブル値パラメーターを使用して、クライアント アプリケーション内のデータ行をカプセル化し、パラメーター化された 1 つのコマンドでデータをサーバーに送信できます。入力データ行はテーブル変数に格納され、Transact-SQL を使用して操作できます。

まず、MSDN のこの記事を読んでください。

于 2012-12-12T12:00:41.340 に答える
0

「 StringBuilder 」を試して、「容量」コンストラクター引数を使用して事前に十分なスペースを割り当てることができます。そうすれば、ターゲット文字列を作成する際に、文字列をより長いバッファーに何度もコピーする必要がなくなります。次に、foreach ステートメントなどで結合を行います。

これは、「string.Join」が内部でどのように実装されているかによって、高速になる場合とそうでない場合があり、.NET フレームワークのバージョンによって異なる可能性があります。

于 2012-12-12T12:08:09.830 に答える
0

読みやすさを犠牲にしてパフォーマンスの向上を求めている場合は、ループで StringBuilder を使用する方が高速になるはずですString.Join<T>(string, IEnumerable<T>)(foreach を使用しない場合はさらに高速になります)。

を見てみましょう:

foreach の Stringbuilder は for および String.Join() よりも遅く、コレクションでサックしますか?

C# での String.Join のパフォーマンスの問題

于 2012-12-12T13:17:15.607 に答える
-2

パラメータとして渡します。

using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection))
        {
        //
        // Add new SqlParameter to the command.
        //
        command.Parameters.Add(new SqlParameter("Name", dogName));          
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            int weight = reader.GetInt32(0);
            string name = reader.GetString(1);
            string breed = reader.GetString(2);
            Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight,name,breed);
        }
        }
于 2012-12-12T12:01:25.647 に答える