C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 変数の変化の取得方法


(過去ログ 19 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■7600 / inTopicNo.1)  変数の変化の取得方法
  
□投稿者/ しょうた (1回)-(2007/09/11(Tue) 09:19:23)

分類:[C#] 

はじめまして、しょうたと申します。
C#はかなり初心者です。ですから、こんなことができるのかがよくわかりません。

内容は、下記のような配列を用意しておいて、任意の要素に値の代入があったときに、
それをトリガとして、変更のあった要素とその値を使って処理を開始したいのです。

int[] array = new int[5000];

タイマーイベントを使って、常に値を比較して変化をみなければいけないのでしょうか?
配列の要素数は何千単位で値の変化はリアルタイムで取得したいので、比較をしていると
プログラムが重くなりそうで心配です。

調べようといろいろ検索しているのですが、どのように調べればよいかもわからなくて困っています。
解決方法、アドバイス等なんでも構いませんので、お解りになるかたがいらしゃったらお教えいただけないでしょうか?

宜しくお願い致します。



引用返信 編集キー/
■7601 / inTopicNo.2)  Re[1]: 変数の変化の取得方法
□投稿者/ れい (120回)-(2007/09/11(Tue) 09:31:24)
No7600 (しょうた さん) に返信
> 内容は、下記のような配列を用意しておいて、任意の要素に値の代入があったときに、
> それをトリガとして、変更のあった要素とその値を使って処理を開始したいのです。
> タイマーイベントを使って、常に値を比較して変化をみなければいけないのでしょうか?

配列にいつ入るか、全くわからないのでしたら、
毎回全て比較するしかありません。
勿論重いですし、よくないと思います。

普通はいつ入るかわからないことはありません。

フラグを用意しておいて、フラグが経っていたら配列を調べなおすとか。
そもそも配列に入れる段階で、「どこに」「なにを」入れるのか、別に記録しておいてもいいですし。

ですので、前提が間違っていると思います。
普通はそんな状況にならないようにプログラムを組みます。
引用返信 編集キー/
■7602 / inTopicNo.3)  Re[2]: 変数の変化の取得方法
□投稿者/ 囚人 (162回)-(2007/09/11(Tue) 09:45:51)
配列のままだと多分無理なので、ラップしたクラスを。次にのように、イベントの引数としてインデックスを渡せば良いかと。

class ArrayWithEvent
{
	private int[] _array = new int[5000];

	public event HogeEventHandler HogeEvent;

	public int this[int index]
	{
		get{ return _array[index]; }
		set
		{
			if(HogeEvent != null)
			{
				HogeEvent(this, new HogeEventArgs(index));
				_array[index] = value;
			}	
		}
	}
}

引用返信 編集キー/
■7603 / inTopicNo.4)  Re[3]: 変数の変化の取得方法
□投稿者/ 中博俊 (1156回)-(2007/09/11(Tue) 10:44:40)
中博俊 さんの Web サイト
それINotifyPropertyChangedの実装そのものだし>囚人
一般的な実装があるので、それを実装するなりしてください。
一番いいのは、何も考えずにObservableCollectionを使うことです。
#スペルミスしてたらフォローよろしく>どなたか
引用返信 編集キー/
■7604 / inTopicNo.5)  Re[4]: 変数の変化の取得方法
□投稿者/ しょうた (2回)-(2007/09/11(Tue) 11:28:37)
れいさん、囚人さん、中博俊さん 投稿ありがとうございます。

どれがよいかよくわからないので、内容を参考に調べてみます。

その結果はまた報告させていただきます。
では、しばらく調べものをしますので…

ありがとうございました。
引用返信 編集キー/
■7605 / inTopicNo.6)  Re[5]: 変数の変化の取得方法
□投稿者/ 囚人 (163回)-(2007/09/11(Tue) 13:56:45)
>それINotifyPropertyChangedの実装そのものだし>囚人

だと、プロパティに変化があったことしか分からないので、ちょっと違うかなと思います。インデクサは無理じゃないかな。


>一番いいのは、何も考えずにObservableCollectionを使うことです

だと、WPF 依存みたいな感じでちょっと嫌ですねぇ。(名前空間はそうでないけど、アセンブリが…)


やっぱり、INotifyPropertyChanged とか ObservableCollection は UI が絡んでナンボって気がしますね。
引用返信 編集キー/
■7607 / inTopicNo.7)  Re[4]: 変数の変化の取得方法
□投稿者/ れい (121回)-(2007/09/11(Tue) 14:56:40)
No7603 (中博俊 さん) に返信
> 一番いいのは、何も考えずにObservableCollectionを使うことです。

なんで配列を監視しなきゃならないのかわからないので、
「一番いい」のは何かわからないと思いますねぇ。
パフォーマンスも気にしているようだし。

そもそも何千単位の要素をもつ配列の監視をしなきゃいけないなんていうこと自体が変だと思います。

> やっぱり、INotifyPropertyChanged とか ObservableCollection は UI が絡んでナンボって気がしますね。

ちょっと同意。
私は「配列の監視->なんか変だよ」と言ってるのに、
UIが絡んだりすればコレクションの監視ぐらい全然OKと思ってしまうのはなぜなんでしょう:D
引用返信 編集キー/
■7608 / inTopicNo.8)  Re[5]: 変数の変化の取得方法
□投稿者/ 中博俊 (1157回)-(2007/09/11(Tue) 15:07:49)
中博俊 さんの Web サイト
UIからまなくても全然問題ないとおもいますけど。
ちなみに、コレクションに入れる物の一部の変化も受け取りたければCpllectionがINotifyPropertyChanged.PropertyChangedイベントをフックして、エスカレーションします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -