DOBON.NETプログラミング掲示板過去ログ
自作のコントロールが重くて仕方ない
題名: 自作のコントロールが重くて仕方ない
著者: TY
日時: 2004/01/05 16:55:24
ID: 2018
この記事の返信元:
(なし)
この記事への返信:
[2019]
Re[1]: 自作のコントロールが重くて仕方ない
琴
2004/01/05 17:08:57
[2028]
Re[1]: 自作のコントロールが重くて仕方ない
よねKEN
2004/01/06 1:12:29
ツリーを表示
分類:[.NET]
ちょくちょく書き込みさせていただいてます.
(質問ばかりで申し訳ないです)
今,自作のテーブルコントロール(エクセルの表みたいなもの)を作っています.
行,列のヘッダーには,(VB.NETで標準で用意されている)ボタンコントロールを,
セルには,テキストボックスコントロールを使用しています.
表のサイズは,3000行×10列くらいを想定しています.
ということで,テキストボックス30000個(ボタンコントロールは3000個あまり)を
生成しなければいけないのですが,起動時に重くてしかたありません.
最初,プログラムの中で30000回ループさせてテキストボックスを生成していました.
重いのはこれのせいかなと思って,デザイン時に30000個生成させることにしました.
(ここの過去ログを参照させていただきました.)
するとデザイン時に非常に重たくなってしまいました.
しかし,まあこれは予想の範疇で,実行時に軽くなってくれればいいかなと思ってたの
ですが,全然満足のいくレベルになってくれません.
今,1000行×5列くらいでテストしてますが,CPUが1G,メモリが500MのPCで
起動に1分以上かかります.
最終的にはこのくらいのサイズの表を10枚以上使用した入力ジェネレータを
つくらなければならないので,この程度のサイズで,こんな遅さだと使えません.
数がこれくらいになると,これくらいの時間がかかってしまうのでしょうか?
解決策,もしくは別の方法(標準のコントロールを使わない方法など)を
知っている方がいらしたら,教えてください.
よろしくお願いいたします.
題名: Re[1]: 自作のコントロールが重くて仕方ない
著者: 琴
日時: 2004/01/05 17:08:57
ID: 2019
この記事の返信元:
[2018]
自作のコントロールが重くて仕方ない
TY
2004/01/05 16:55:24
この記事への返信:
(なし)
ツリーを表示
■No2018に返信(TYさんの記事)
> ちょくちょく書き込みさせていただいてます.
> (質問ばかりで申し訳ないです)
>
> 今,自作のテーブルコントロール(エクセルの表みたいなもの)を作っています.
> 行,列のヘッダーには,(VB.NETで標準で用意されている)ボタンコントロールを,
> セルには,テキストボックスコントロールを使用しています.
> 表のサイズは,3000行×10列くらいを想定しています.
> ということで,テキストボックス30000個(ボタンコントロールは3000個あまり)を
> 生成しなければいけないのですが,起動時に重くてしかたありません.
> 最初,プログラムの中で30000回ループさせてテキストボックスを生成していました.
> 重いのはこれのせいかなと思って,デザイン時に30000個生成させることにしました.
> (ここの過去ログを参照させていただきました.)
> するとデザイン時に非常に重たくなってしまいました.
> しかし,まあこれは予想の範疇で,実行時に軽くなってくれればいいかなと思ってたの
> ですが,全然満足のいくレベルになってくれません.
> 今,1000行×5列くらいでテストしてますが,CPUが1G,メモリが500MのPCで
> 起動に1分以上かかります.
> 最終的にはこのくらいのサイズの表を10枚以上使用した入力ジェネレータを
> つくらなければならないので,この程度のサイズで,こんな遅さだと使えません.
>
> 数がこれくらいになると,これくらいの時間がかかってしまうのでしょうか?
> 解決策,もしくは別の方法(標準のコントロールを使わない方法など)を
> 知っている方がいらしたら,教えてください.
>
> よろしくお願いいたします.
>
30000行全てを同時に表示するのでないのならば、表示される部分のみ(20行なら20行のみ)作成・表示し、
非連動のスクロールバーのValue値に応じてセルの内容を随時変更するというのはどうでしょうか?
全てのセルの内容がメモリに保持されるので、それでもそれなりに重いかもしれませんが…。
題名: Re[1]: 自作のコントロールが重くて仕方ない
著者: よねKEN
URL:
http://www5b.biglobe.ne.jp/~yone-ken/
日時: 2004/01/06 1:12:29
ID: 2028
この記事の返信元:
[2018]
自作のコントロールが重くて仕方ない
TY
2004/01/05 16:55:24
この記事への返信:
[2031]
Re[2]: 自作のコントロールが重くて仕方ない
TY
2004/01/06 9:48:06
[解決]
ツリーを表示
2004/01/06(Tue) 01:17:03 編集(投稿者)
> 行,列のヘッダーには,(VB.NETで標準で用意されている)ボタンコントロールを,
> セルには,テキストボックスコントロールを使用しています.
> 表のサイズは,3000行×10列くらいを想定しています.
> ということで,テキストボックス30000個(ボタンコントロールは3000個あまり)を
> 生成しなければいけないのですが,起動時に重くてしかたありません.
インスタンスの生成はかなり重い部類の処理なので、
コントロールを大量に生成すれば、否応なしに極度に重くなります。
また、Windowsのリソースを大量に消費しますのでOSさえも不安定にしかねません。
まずはインスタンスの生成を減らすことが重要かと思います。
> 最初,プログラムの中で30000回ループさせてテキストボックスを生成していました.
> 重いのはこれのせいかなと思って,デザイン時に30000個生成させることにしました.
デザイン時に生成する、ということは単にデザイナでデザインするための便宜上のもの
でしかありませんので、すべてのコントロールは実行時に生成されます。
#デザイン時にコントロールを配置した場合は、デザイナを開くたびに
#毎度、それらのコントロールのインスタンスを生成し、VS.NET上に表示しているだけです。
> (ここの過去ログを参照させていただきました.)
> するとデザイン時に非常に重たくなってしまいました.
そのため、デザイン時に重たいわけですが、
> しかし,まあこれは予想の範疇で,実行時に軽くなってくれればいいかなと思ってたの
> ですが,全然満足のいくレベルになってくれません.
実行時に生成されないわけではないので、実行スピードには何の影響もありません。
> 数がこれくらいになると,これくらいの時間がかかってしまうのでしょうか?
> 解決策,もしくは別の方法(標準のコントロールを使わない方法など)を
> 知っている方がいらしたら,教えてください.
もっとも手っ取り早いのは、標準でも使用できるDataGridコントロールを使うか、
市販の表コントロールを購入して使うことでしょう。
表コントロール等を開発している人間ではないですが、
自作するのであれば、表はすべて自前で描画し(見えている部分だけ)、
表に関連するすべての情報を自前のデータ構造で管理する必要があると思います。
#.NETじゃないですが、表系コントロールは以前作ろうと試みたことがあります。
#表の列幅の変更一つとっても処理速度を殺さずに実装するのが、
#私には難しかったので断念しましたけど。
#そのときは、入力時だけ入力箇所の位置にTextBoxを表示させて、
#そこで入力させるといった手を使ってました。
題名: Re[2]: 自作のコントロールが重くて仕方ない
著者: TY
日時: 2004/01/06 9:48:06
ID: 2031
この記事の返信元:
[2028]
Re[1]: 自作のコントロールが重くて仕方ない
よねKEN
2004/01/06 1:12:29
この記事への返信:
(なし)
ツリーを表示
琴さん,よねKENさん,ありがとうございます.
よねKENさんのレス,大変勉強になりました.
> もっとも手っ取り早いのは、標準でも使用できるDataGridコントロールを使うか、
> 市販の表コントロールを購入して使うことでしょう。
DataGridを最初使おうと思ってたのですが,(ここでもいくつか質問させて
いただいたのですが)どうもやりたい処理,表現ができそうにないので
(もしくは,困難そうなので)あきらめました.
市販のは,予算等の関係で…(VB6時は文化オリエントのSpreadを使ってました)
とりあえず,琴さんの方法で考えてみます.
(やりたい処理ができるかどうか,ちょっと心配なのですが)
一応解決済みにしておきますが,参考になるようなことがございましたら
教えてください.ありがとうございました.
解決済み!
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
ちょくちょく書き込みさせていただいてます.
(質問ばかりで申し訳ないです)
今,自作のテーブルコントロール(エクセルの表みたいなもの)を作っています.
行,列のヘッダーには,(VB.NETで標準で用意されている)ボタンコントロールを,
セルには,テキストボックスコントロールを使用しています.
表のサイズは,3000行×10列くらいを想定しています.
ということで,テキストボックス30000個(ボタンコントロールは3000個あまり)を
生成しなければいけないのですが,起動時に重くてしかたありません.
最初,プログラムの中で30000回ループさせてテキストボックスを生成していました.
重いのはこれのせいかなと思って,デザイン時に30000個生成させることにしました.
(ここの過去ログを参照させていただきました.)
するとデザイン時に非常に重たくなってしまいました.
しかし,まあこれは予想の範疇で,実行時に軽くなってくれればいいかなと思ってたの
ですが,全然満足のいくレベルになってくれません.
今,1000行×5列くらいでテストしてますが,CPUが1G,メモリが500MのPCで
起動に1分以上かかります.
最終的にはこのくらいのサイズの表を10枚以上使用した入力ジェネレータを
つくらなければならないので,この程度のサイズで,こんな遅さだと使えません.
数がこれくらいになると,これくらいの時間がかかってしまうのでしょうか?
解決策,もしくは別の方法(標準のコントロールを使わない方法など)を
知っている方がいらしたら,教えてください.
よろしくお願いいたします.