0

彼らがこの質問を何度も尋ねられたことを残念に思いますが、私はまだ最良の答えを見つけていません。

アプリケーションがレコードをダウンロードしたり、レコードをフィルタリングしたりするのに長い時間がかかるのではないかと心配しています。tbl_customerというテーブルがあると仮定します。そして、tbl_customerに10,000行以上を記録します。

最初の質問は、データグリッドビューを使用してレコードを表示しています10,000行までのすべてのレコードをデータグリッドビューにダウンロードすると理想的ですか?または、レコード行の制限を設定したほうがよいでしょうか。

2番目の質問、 tbl_customerのレコードをフィルタリングするための最良の方法は何ですか。SQLを使用してクエリを実行する必要がありますか?またはLINQを使用していますか?または多分より良い方法がありますか?

今のところ、私はこの方法のみを使用します:

DataTable dtCustomer = new DataTable();

 using (SqlConnection conn = new SqlConnection(cs.connString))
        {
            string query = "SELECT customerName,customerAddress FROM tbl_customer WHERE customerAddress = '"+addressValue+"' ORDER BY customerName ASC;";

            using (SqlDataAdapter adap = new SqlDataAdapter(query, conn))
            {
                adap.Fill(dtCustomer);

            }
        }

dgvListCustomer.DataSource = dtCustomer

それから私はLINQについて学ぶので、私はこれが好きです

    DataTable dtCustomer = new DataTable();

         using (SqlConnection conn = new SqlConnection(cs.connString))
                {
                    string query = "SELECT * FROM tbl_customer ORDER BY customerName ASC;";

                    using (SqlDataAdapter adap = new SqlDataAdapter(query, conn))
                    {
                        adap.Fill(dtCustomer);

                    }
                }

var resultCustomer = from row in dtCustomer.AsEnumerable()
                                         where row.Field<string>("customerAddress") == addressValue
                                         select new
                                         {
                                             customerName = row["customerName"].ToString(),
                                             customerAddress = row2["customerAddress"].ToString(),

                                         };

 dgvListCustomer.DataSource = resultCustomer;

ワークフローSQL>DATATABLE>LINQ> DataGridViewはレコードのフィルタリングに適していますか?または、より良い提案があれば大歓迎です。

ありがとうございます..:)

4

1 に答える 1

1

アプリケーションがレコードをダウンロードしたり、レコードをフィルタリングしたりするのに長い時間がかかるのではないかと心配しています。

ようこそ-あなたは私のような世界に住んでいるようです。パフォーマンスミリ秒はミリ秒単位で測定されます。低電力サーバーでは、10.000行をホットロードしてフィルタリングするのに1ミリ秒(0.001秒)以上かかる可能性があります。

そのため、私のアドバイスは、そのデータベースをタブレットや携帯電話に配置するのではなく、データベースサーバーに少なくとも適切なデスクトップレベルのコンピューティングサーバーまたはVMを使用することです。

ヒントとして:私は定期的に10億行のテーブルに対してクエリを実行しており、高速です。最近では、100万行を下回るものはすべて冗談です。実際、15年以上前にデータベースを使い始めたときは、言及する価値はありませんでした。あなたは、フェラーリとポルシェのどちらを使用するのが良いかを尋ねる人です。これらのケースのいずれかが20km/hを超えるかどうかを心配しています。

10,000行までのすべてのレコードをデータグリッドビューにダウンロードすると理想的ですか?

解雇されるために?はい。データベースの古いルール:特に手がかりがない場合は、必要以上のデータをロードしないでください。SQL側を忘れてください-10.000行以上のUIの問題、特にユーザビリティの問題が発生します。

SQLを使用してクエリを実行する必要がありますか?またはLINQを使用していますか?

ヒント:Linqも内部でSQLを使用しています。問題はもっと多いです-あなたの例のように手書きSQLのための退屈な反復コードを書くのにどれくらいの時間を費やしたいですか?序数ではなく名前でフィールドを参照したり、フィールドリストの代わりに「select *」を要求したりするなど、「賢い」ことも行うことを考えると、ボットは明らかに初心者の間違いです。

絶対にすべきではありませんが、行うべきことは、DataTableを使用することです。プログラミングデータベースについてのまともな本を入手してください。RTFSMが役立つ場合があります-両方のLINQ(意味がわかりません-LINQはコンパイラの言語であり、実装者が必要です。そのため、NHibernate、Entity Framework、Linq2Sql、BlToolkitなどがあります。 LINQクエリからSQLステートメントへ)。

ワークフローSQL>DATATABLE>LINQ> DataGridViewはレコードのフィルタリングに適していますか?

フェラーリは、20トンの石炭をAからBに輸送するのにも適しています。これは、フェラーリにとって最悪の車です。GSourスタックはおそらく私が見た中で最悪ですが、それを実行できるという点で適切です-ゆっくりと、たくさんのメモリを使用しますが、結果が得られ、うまくいけば解雇されます。高性能データベースからデータテーブルにデータをプルし、非統合テクノロジ(LINQ)を使用して(データテーブルのインデックスを使用せずに)フィルター処理して、さらに別のレイヤーに移動します。

アイデアを与えるためだけに、これにより、かなりの数の「プログラミング開始」コースから削除されます。

どうですか:

LINQ

点。

UIに移動するビジネスオブジェクトのコレクションをプルします。限目。

使用しているテクノロジーのサンプルコードの少なくとも一部をお読みください。

于 2012-11-18T13:53:29.057 に答える