2

PurchaseOrder というクラス内にメソッドがあります。ここではList<string>、サプライヤーのリストを取得し、これらのリストをコンボ ボックスに入力していました。コードは実際に機能しますが、SQL Server データベースにサプライヤーを追加するにつれて、読み込まれるフォームが少し遅くなることに気付きました。どうすればそのような速度を最適化できますか?

以下は、PurchaseOrderClass.cs のメソッド PopulateSuppliers() と Form_Load イベントの 2 つのコード セットです。

    public object PopulateSuppliers()
    {
        //Create an instance of a List of Strings.
        List<string> ListOfSuppliers = new List<string>();

        string sqlString = "SELECT CompanyName FROM tbl_suppliers WHERE Archived = 'False';";

        SqlConnection sqlConnection = new SqlConnection(connectionString);
        SqlCommand sqlCommand = new SqlCommand(sqlString, sqlConnection);

        sqlConnection.Open();
        sqlReader = sqlCommand.ExecuteReader();

        while (sqlReader.Read())
        {
            ListOfSuppliers.Add(sqlReader["CompanyName"].ToString());
        }

        sqlReader.Close();
        sqlConnection.Close();

        return ListOfSuppliers;
    }

    private void frmPurchaseOrderEditor_Load(object sender, EventArgs e)
    {
        ...

        //Populate a list of suppliers.
        cboSuppliers.DataSource = PurchaseOrder.PopulateSuppliers();

        ...
    }
4

2 に答える 2

0

アーカイブされた列にインデックスを作成すると役立つかもしれません..しかし、あなたのコードはうまく見えます. ただし、サプライヤーのリストが増え続ける場合は、コンボをページ化されたデータグリッドに置き換える可能性について考えてください。

また、DDBB を操作するときは必ず finally ブロックを使用し、そこにコマンドと接続クラスを破棄して、管理されていないリソースを解放します。

于 2013-04-19T11:22:23.073 に答える
0

あなたのコードは完全に問題ないと思います...しかし、テーブル内のデータが多すぎる場合、コンボボックスが最適なオプションではないと思います..GridView、ListView、Repeaterなどの他の代替手段を試してください...そして常にクライアント側があります。

SqlReader、File などのリソース (IDisposable インターフェイスを使用するすべてのクラス ライブラリ タイプ) を使用する場合は、リソースの割り当てと破棄を処理する "using" ステートメントを使用する必要があります...

ステートメントの使用の詳細については、ここをクリックしてください

于 2013-04-19T11:36:43.550 に答える