静的インスタンスのインスタンスがnullではなく、MYDBクラスの参照がGACによって破棄され、nullに設定されている可能性があります。静的インスタンスでのオブジェクト参照の問題
答えて
GCは決して何もnull
に設定されません。期間。
オブジェクトへの参照がある場合、GCはオブジェクトをまだ使用していることを確認し、その参照で保持しているため、完了するまで収集しません。あなたはそれに値を割り当てることができない(と私はあなたがそのシナリオを防ぎ、あなたのコード内の初期化子を持って見ることができます)あなたはnull
の値を割り当てる場合、または場合
MYDB
フィールドはnull
することが唯一の方法でありますあなたのコードの後のある時点でフィールドに移動します。
私はあなたが得る専用のプロパティにMYDB
をオンに提案して、クラスのコンストラクタでそれを初期化します:
private DA_Setting()
{
this.MYDB = new db();
}
public db MYDB { get; private set; }
これは、あなたのクラスの外からこの値を設定することはできませんし、あなたに多くを与える必要があります保証しますより予測可能なタイプのもの。
ご協力ありがとうございます! –
これがあなたの問題を解決するのに役立つなら、あなたの質問に対する「受け入れられた」回答としてマークしてください。そうでない場合は、質問を更なる情報で更新してください。お手伝いをいたします。 –
「GCは決して何かをnullに設定しません」という記述は事実上正しくありません。それは、通常、カテゴリーステートメントを作成する前に事実のチェックをします。 http://msdn.microsoft.com/en-us/library/system.weakreference.aspx WeakReferenceクラス*の 'Target'プロパティは、GC中に' null 'に設定することができます。 –
GCはまだ到達可能な場合はそのフィールドを収集せず、到達可能です。私はいくつかの他のオブジェクトがnullだと思います。 GetNamesメソッドでコードにステップインしてみましたか?
静的変数はGCルートです。つまり、アプリケーション/ AppDomainが実行されている間は静的変数は収集されません。フィールドはGCルートのフィールドなので、収集する方法はないはずです。ガベージコレクションの詳細については、こちらを参照してください。http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/
あなたはそれについて確かですか? –
はい、あなたのプログラムの実行中にGCがあなたの変数を盗むのであれば、本当に悪いですね。 null参照のエラーは、おそらくGetNamesメソッドの中にある可能性があります。それに踏み込んでみてください。または、例外に付随するスタックトレースを見てください。 – Botz3000
お世話になりました! –
私はそれを理解していないはずです。スタティックな初期化子とコンストラクタは、静的メンバにアクセスする前に実行されます。これは、C#のドキュメントで約束されています。インスタンスの初期化子はインスタンスコンストラクタで実行されるため、DA_Setting.Instance.Getname()
を呼び出す場合は、そこにnull参照が存在しないようにしてください。ガベージコレクタは、あなたがまだ参照しているものをランダムに処理して処理するつもりはなく、静的メンバのライフサイクルが終了していない間は、まだアプリケーションが参照されていますランニング。
null参照例外の原因は何ですか。それはdb
インスタンス内の何かである可能性がありますか?
まあ、ログの位置は、オブジェクトの参照がnullであることを示しています。あなたは、GCの静的インスタンスのクラスが保持している参照を廃棄しないと言っているので、私の次のステップは、それが戻ってくるパラメータと値を確認してください。 –
- 1. オブジェクト参照の問題
- 2. Javaオブジェクト参照の問題?
- 3. C#「非静的フィールドにオブジェクト参照が必要です」静的メンバー関数のクラス問題
- 4. テンプレート関数からの静的関数参照の問題xlC
- 5. 静的インスタンス変数はクラスのインスタンスを参照します
- 6. オブジェクトへの参照の問題
- 7. C#の - オブジェクト参照のインスタンス
- 8. オブジェクト参照型(Dynamic Binding)の問題?
- 9. CoffeeScriptのグローバルな静的オブジェクトでの自己参照
- 10. インスタンス参照によってアクセスされる静的メンバーのベストソリューション
- 11. 非静的フィールドのオブジェクト参照が必要です
- 12. 私は静的オブジェクト参照をいつ使うのですか
- 13. Java - 静的でないフィールドリストへの静的参照
- 14. 静的ファイル参照をバージョン
- 15. 非静的メソッドのオブジェクト参照の取得
- 16. 静的/非静的メソッドの問題
- 17. 開始時の静的参照変数とインスタンス参照変数の違いは何ですか?
- 18. null参照の例外項目オブジェクト参照してさらに別の問題
- 19. オブジェクト参照を静的ヘルパーメソッドに渡す複数のスレッド
- 20. 非静的フィールドにオブジェクト参照が必要です
- 21. サービス参照の問題
- 22. geom_map "map_id"参照の問題
- 23. VS 2003参照の問題
- 24. void *ポインタの参照問題?
- 25. xmlスキーマ参照の問題
- 26. エクセルVBAの参照問題
- 27. リソース参照の問題
- 28. アセンブリ参照の問題。
- 29. 関連オブジェクトのインスタンスを参照する
- 30. java間の静的変数参照enum
instance.MYDB.GetNames()? – Goran
DBコールを作成します。 –
例外のスタックトレースを見てください(または私たちに見せてください)。 – Heinzi