2

私は.netc#アプリケーションを書いています。

xmlファイルからデータを取得し、そのデータを.netキャッシュにキャッシュして、メソッドから返します。データに対して何らかの処理を実行し、それをアプリケーションの別の部分に返します。

次の呼び出しでは、キャッシュから読み取り、処理して返します。

私が抱えている問題は、キャッシュデータに対して実行された処理がローカル変数ではなくキャッシュを変更しているように見えることです。つまり、次にキャッシュから読み取るときに、前の処理から処理されたデータが返されます。

したがって、キャッシュから返されるデータは、値ではなくrefによって返されるようです。

キャッシュが変更されないようにする方法はありますか?

4

3 に答える 3

5

インメモリキャッシュは、オブジェクトへのポインタを格納します。それはグローバル変数のようなものです。キャッシュされたアイテムへの他の変数の割り当ては、同じオブジェクトを参照します。これは、アウトプロセスキャッシュまたは分散キャッシュでは異なります。これらのタイプのキャッシュの場合、オブジェクトはキャッシュからシリアル化および逆シリアル化する必要があります。そのような場合、あなたはコピーを手に入れています。

アウトプロセスの動作をシミュレートする場合は、オブジェクトをコピー/クローンするか、キャッシュ外のオブジェクトをシリアル化/逆シリアル化できます。

于 2011-05-25T00:37:13.603 に答える
3

これは、データ型について理解する必要があるかなり基本的なことです。

キャッシュが参照型、つまりオブジェクトのインスタンスなどを格納しているようです。これらのいずれかが渡されると、インスタンスへの参照が返されます。参照自体は実際には値によって返されます。つまり、参照を変更することはできませんが、もちろん、参照しているthihgは変更できます。それがあなたが見ている行動です。

これを機能させて、インスタンスを操作するときにインスタンスが変更されないようにする場合は、最初にそれらのコピーを作成します。(複合型の場合は、クローンメソッドを作成する必要がある場合があります)

于 2011-05-24T22:41:15.603 に答える
1

タイプによっては、解決策は、キャッシュからの取得時にオブジェクト/アイテムのクローンを作成することです。

XmlNodeCloneメソッド

于 2011-05-24T22:28:03.757 に答える