2011-11-10 8 views
4

異なるアプリケーションがアセンブリを読み込むときを除いて、静的なクラス変数のようなものが欲しいです。すべて同じ変数を共有したいと思っています。アセンブリの後続のインスタンスを同じメモリに共有する方法はありますか?

私はディスクやデータベースに書き込むことができますが、これはSQLクエリで使用されるプロセスのためであり、おそらくそれはあまり遅くなります(実際にはこれらのオプションをテストするつもりですが、その間にこの質問をしてくださいb/c私はそれが受け入れられる解決策になるとは思わない)。

私が展開で最低のオーバーヘッドをincurrsソリューションを使用することを好むだろう、とソリューションは、それが私は終わりだときに使用するのは簡単だとして作成することは容易ではない場合、私は気にしません。

私はいくつかの永続メモリフレームワークがあることを知っています。私はまだそれらのうちのいずれかをチェックしていないとおそらくそれらのいずれかが完璧なので、1つをお勧めします。私は自分自身で何かを書くこともできます。特に、私が展開するのが簡単な場合は特にそうです。

ご協力いただきありがとうございます。

編集:私は本当に簡単な解決策を見落としていたようです。私の問題は、私が書いたSQL集約関数への呼び出しの間にデータを直列化するために8000バイトのスペースしか提供しないというSQLの問題でした。あなたのデータを圧縮し、その8000バイトを最大限に活用する方法についての記事を読んで、私ができることは何もないと思っていました。それが判明したように、私は0から8000の範囲の代わりにMaxBytes = -1を設定して、2GBまでの空間を得ることができます。私はこれが3.5フレームワークで追加された何か新しいものだと信じています。なぜなら、この8000バイトの制限について語っているさまざまな記事があるからです。これは私が過去に他の理由のために解決したいと思っていたし、今私は、私はアプリの間で通信するために本当に簡単かつ迅速な方法が必要な場合に何をすべきか知っている問題であるとして

はかかわらず、あなたの答えありがとうございました。

答えて

5

を使用することができます。

1つのオプションは、しかし、「ストア」へ共有データを.NET Memory-mapped fileサポートを使用することです。これにより、すべてのプロセスがアクセスできる場所に情報を含むファイルを書き込むことができます。

+0

それは同時にインスタンスを実行するためにはうまくいくが、私の場合は同時に実行されていない。メモリのようなサウンドは、インスタンス間で失われる(またはディスクに永続化され、目的を破る)。 、右? –

+1

@BrandonMoore同じ時間に実行されていない2つのインスタンス間で共有データが必要な場合は、それを維持する必要があります...達成しようとしているもの –

+0

SQL集計モード関数、選択すると、製品グループからスタイル別にdbo.mode(price)が表示されます "。申し訳ありませんでしたが、これまでの回答を取り戻したいと思っていました。人々がそうでなければ示唆していた代替の解決策を聞く前に。問題は、集約関数を実装するためにSQLが提供するインタフェースが、8000バイトしか許さないシリアライザを使用することです。 –

2

各プロセスには独自のアドレス空間があります。あなたはあなたががshared memoryを使用することができます

を意図するようにあなたは、単に変数を共有することはできません。

は、.NET 4の上にある場合は、単に各プロセスは、それが自身の孤立メモリアドレス空間のしているので、あなたは、メモリ内のデータとしてこれを保存し、それがプロセス間で共有することはできませんMemory-Mapped Files

+0

私は、これらのオプションのいずれかを使用して、私が使用しているメモリへの参照を保持するために何らかのバックグラウンドアプリが必要になると推測しています。または、インスタンス間で解放されます。 –

+0

Memcached(http://en.wikipedia.org/wiki/Memcached)のように設計された製品をプロセス間で深刻な量のデータをキャッシュする必要があります。 –

+0

バックグラウンドアプリは必要ありません。 ** MemoryMappedFileを使用することができます。CreateOrOpen ** –

1

マシン全体のカウントまたはロックをしたい場合は、セマフォー - http://msdn.microsoft.com/en-us/library/z6zx288a.aspxまたはmutexes http://msdn.microsoft.com/en-us/library/hw29w7t1.aspxのような名前付き同期オブジェクトを使用することができます。 nameが指定されている場合、そのようなオブジェクトはプロセス全体の代わりにマシンワイドです。

+0

私の問題の一部はサイズです。私が使用しているインターフェースは、インスタンス間でデータを保持するためにバイナリシリアライザを実際に使用していますが、問題は最大8000バイトが許されており、それは小さすぎます。それはここで問題になるだろうか? –

+0

明らかにあなたは何か他のものが必要です - 同期オブジェクトは単一カウントを超えるものを保持できません。 –

+0

私はそれがおそらく事実だろうと考えていました。興味深い考えは確かですが。 –

関連する問題