2016-04-06 7 views
-1

こんにちは、現在、レコードと9列の千(約3000+)行のdatagridviewを持っています。私はthis methodを使用していましたが、datagridviewをエクスポートしてExcelにエクスポートしました。何百もの行をエクスポートするのに問題はありませんでしたが、何千行もの行になるとハングアップして何も応答しませんでした。vb.netを使用してdatagridviewから1000行をエクスポートする

どのような問題がありますか?これよりも速い/良い他の方法があれば?

ありがとうございました!

+0

あなたがどの方法を参照しているかは絶対にはっきりしていませんが、リンクされたページの最初の回答であれば、大量のデータをExcelに転送するのが最も効率的ではありません。データを2次元配列にロードして、シート上に一度に配置します。 https://www.add-in-express.com/creating-addins-blog/2013/11/29/populate-excel-workbooks-ranges-with-arrays/ –

+0

@TimWilliams申し訳ありませんが、それを明確に述べていない、はい私リンク内のメソッドを使用しています。実際にはどうしたらいいですか?あなたは私に簡単な例を与えることができますか?ありがとうございました! –

+0

それは私が投稿したリンクにあります –

答えて

0

コードはUIスレッド上で実行されているので、アプリケーションは実行中にフリーズします。 UIの応答性を維持するには、セカンダリスレッドでコードを実行する必要があります。少なくとも、UIスレッド上で実行される必要があるように、データがコントロールから取得されるという問題があります。

BackgroundWorkerを使用し、DoWorkイベントハンドラで作業することをお勧めします。 ReportProgressを呼び出すループを設定すると、UIスレッドのProgressChangedイベントが発生し、ページ内のデータを取得して、バックグラウンドスレッドのスプレッドシートに書き込むことができます。私は例をフォローアップします。

+0

はい、私はそれが凍るだろうが、実際にハングアップ、それはエクスポートを完了しないだろう、私は12時間以上を実行している私のPCを残していると知っている..とにかくバックグラウンドワーカーを使用するよりも?それを高速にエクスポートする方法はありますか? –

+0

なぜ、どこでハングするのかを調べるのに気をつけましたか?何かがハングした場合は、無限ループまたは返されないメソッド呼び出しが原因です。あなたの場合はどちらですか?調べる。マイルストーン時の出力を追加して、どれぐらいの距離があるかを知ることができます。 – jmcilhinney

+0

また、 'ReportProgress'メソッドは非同期であるため、ProgressChanged'イベントハンドラからデータを取得するために確実に使用することはできません。つまり、メソッドを自分で呼び出す必要があります。あなたのUIがフリーズしても問題ない場合は問題はありませんが、そうすれば 'BackgroundWorker'やその他のマルチスレッドの手段を使用してUIのスレッドでデータを取得することができます。 – jmcilhinney

関連する問題