あなたはイベントをアンフックすることを忘れていませんか?下の例では、4つのスプライトをリストに追加し、各スプライトはゲームのイベントをフックします。私はスプライトを削除し、イベントを発生させます。
このような状況では、4つのスプライトすべてがまだ有効であり、Gameにはまだ参照があるため、イベントが発生します。
あなたのゲームオブジェクトにイベントを使用している場合、それらをすべて実行中のままにすることができます。
class Game
{
public event EventHandler SomeEvent;
List<Sprite> sprites;
public Game()
{
sprites = new List<Sprite>();
sprites.Add(new Sprite(this));
sprites.Add(new Sprite(this));
sprites.Add(new Sprite(this));
sprites.Add(new Sprite(this));
sprites.RemoveAt(0);
EventHandler temp = SomeEvent;
if (temp != null)
{
temp(this, EventArgs.Empty);
}
}
static void Main(string[] args)
{
Game newProgram = new Game();
}
class Sprite
{
public Sprite(Game gameReference)
{
gameReference.SomeEvent += new EventHandler(gameReference_SomeEvent);
}
void gameReference_SomeEvent(object sender, EventArgs e)
{
Debug.WriteLine("Event");
}
}
提案:より良い(全体的な)質問があるかもしれません - >遅延がどこで発生しているかを判断するにはどうすればよいですか?これは多くの異なることによって引き起こされる可能性があるようですが、遅れの問題の根本を特定するためにコードの多くを参照する必要があります – jadarnel27
単純に見越すコードがあまりにも多くあります。私は、理論的な解決策や考えられる原因の遅延をもっと求めています。現在のところ、ネットワークは関与していないので、問題ではありません。 – Johannes
あなたが大きなサブルーチンや疑わしい領域を入力して終了するときに、(デバッグログファイルなどに)タイムスタンプを出力することをお勧めします。この方法で、その時間を失っている場所を知ることができ、問題の方向に向かって作業することができます。 – jadarnel27