2


0

C#でポインターを処理するときに `<List>`を使用する

そのアイテムが本質的にポインタであり、リスト内のすべてのアイテムをそのアイテムの最新のインスタンスに変更しないようにする場合、アイテムをリストに追加するにはどうすればよいですか?

意味は次のとおりです。+画像処理を行っていますが、処理できる速度よりも短い時間(短時間)入ってくる画像を処理する必要がある可能性があります。 この画像の「バースト」の後、私は平均画像レートよりも速く処理できるという事実に依存し、最終的には「追いつく」でしょう。

だから、私がやりたいことは、画像を取得するときに ``に入れ、処理スレッドがビジーでない場合、そのリストから画像を取得して渡すことができます。

私の問題は、画像「Image1」をリストに追加し、「Image1」を新しい画像で埋めるので(次の画像取得中)、リストに保存されている画像を新しい画像で置き換えることを心配していることです画像も(画像変数は実際には単なるポインタであるため)。

したがって、私のコードは次のようになります: ``

while (!exitcondition)
{
    if(ImageAvailabe())
    {
       Image1 = AcquireImage();
       ImgList.Add(Image1);
    }
    if(ImgList.Count > 0)
    {
       ProcessEngine.NewImage(ImgList[0]);
       ImgList.RemoveAt(0);
    }
}

上記を考えると、どうすればそれを保証できますか? - Image1が変更されるたびにリスト内のすべてのアイテムを置き換えるわけではありません。
- これを行うためにいくつかの画像を事前に宣言する必要はありません 処理の種類。
- 私は記憶を食い物にするモンスターを作成しません。

何かアドバイスは大歓迎です。

4 Answer


2


再初期化するだけです:

交換する

Image1 = AcquireImage();

with

Image1 = new Image(AcquireImage());

または単に言う

ImageList.Add(new Image(AcquireImage()));


1


あなたのコードは正しいです。 上記のコードは、以前に追加された画像には影響しません。 この線:

Image1 = AcquireImage();

AcquireImageから返された参照(イメージ)をImage1参照変数に入れます。 その後:

ImgList.Add(Image1);

その参照をリストに追加します。 Image1参照変数を変更しても、既にリストにある参照には影響しません。


0


概念的には、コードは問題ありません。 重要な要素は、AcquireImage()が着信画像ごとに新しいインスタンスを割り当てることです。

Image1がポインターである場合、問題が発生します-ただし、C#参照はポインターではありません。


0


私があなたの言っていることを正しく理解していれば、既存のデータを上書きせずに変数を再利用できるようにしたいでしょう。 良いニュースは、何も変更する必要がないということです。 `Image1`がポインターであると言うとき、それは部分的に正しいです。それは、その時点で指している画像への参照です。 割り当てるとき:

Image1 = AcquireImage();

既存の画像の内容を上書きするのではなく、新しい画像を指すように参照を変更します。 「AcquireImage」が正常に機能し、以前のイメージを上書きするのではなく、毎回新しいイメージを返すと仮定すると、上記のコードは既存の参照を破棄して新しいものを優先します。 ただし、既にリストに追加しているため、画像への参照はコードのどこかに保持されるため、失われることはありません。