C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

vb.net上からのメモリマップドファイル操作について /2400 (19/12/04(Wed) 10:19) #93304
Re[1]: vb.net上からのメモリマップドファイル操作について /Hongliang (19/12/04(Wed) 10:26) #93305
  └ Re[2]: vb.net上からのメモリマップドファイル操作について /2400 (19/12/04(Wed) 10:48) #93306
    └ Re[3]: vb.net上からのメモリマップドファイル操作について /Hongliang (19/12/04(Wed) 11:00) #93308
      └ Re[4]: vb.net上からのメモリマップドファイル操作について /2400 (19/12/04(Wed) 11:34) #93309 解決済み


親記事 / ▼[ 93305 ]
■93304 / 親階層)  vb.net上からのメモリマップドファイル操作について
□投稿者/ 2400 (1回)-(2019/12/04(Wed) 10:19:11)

分類:[.NET 全般] 

VB2017にて、MemoryMappedFilesを利用してメモリマップドファイルを複数書き込むプログラムを作りました。
1か所はタイマーで一定周期毎にCreateOrOpenを行い、1つ目のメモリマップドファイルへデータを送り続けるもの、
他数か所はボタンイベントで押された時に数か所それぞれ1か所ごとに対応したメモリマップドファイルをCreateOrOpenで作成・もしくは開いてデータを送信。

その後、別のプログラムで上記の書込み用プログラムからデータを読み込む専用のプログラムを用意、各メモリマップドファイルのマップ名を指定することでその中身を読み込むプログラムを作成しました。
ところが、読込用プログラムで読み込みを行う際、書込み用プログラムでタイマーで常に書き込んでいるメモリマップドファイルは中身を読み込めるのですが、
ボタンイベントで書き込まれるメモリマップドファイルの中身が空になってしまうことがあります。

これは、プロセスが消えた?かそういうことでメモリマップドファイルの中身が解放されてしまった…ということでしょうか?
よろしければご教授願います。
[ □ Tree ] 返信 編集キー/

▲[ 93304 ] / ▼[ 93306 ]
■93305 / 1階層)  Re[1]: vb.net上からのメモリマップドファイル操作について
□投稿者/ Hongliang (929回)-(2019/12/04(Wed) 10:26:51)
メモリ上に作られた(物理ファイルをもとにしていない)MemoryMappedFileは、最後の利用者がCloseしたときにシステムから削除されます。
維持したいのであればオープンしているインスタンスをだれかが持ち続ける必要があります。
[ 親 93304 / □ Tree ] 返信 編集キー/

▲[ 93305 ] / ▼[ 93308 ]
■93306 / 2階層)  Re[2]: vb.net上からのメモリマップドファイル操作について
□投稿者/ 2400 (2回)-(2019/12/04(Wed) 10:48:05)
No93305 (Hongliang さん) に返信
> メモリ上に作られた(物理ファイルをもとにしていない)MemoryMappedFileは、最後の利用者がCloseしたときにシステムから削除されます。
> 維持したいのであればオープンしているインスタンスをだれかが持ち続ける必要があります。

プログラムは開きっぱなしの状態で、書込は1つだけ一定周期に書込み、他はボタンが押された時、という状態なのですがその場合だとClose扱いになってしまうのでしょうか?
[ 親 93304 / □ Tree ] 返信 編集キー/

▲[ 93306 ] / ▼[ 93309 ]
■93308 / 3階層)  Re[3]: vb.net上からのメモリマップドファイル操作について
□投稿者/ Hongliang (930回)-(2019/12/04(Wed) 11:00:06)
例えば
Using mmf As MemoryMappedFile = MemoryMappedFile.OpenOrCreate(...)
' 書き込み
End Using
なんてやってると、End Usingの時点でこのインスタンスはCloseされます。
他に開いているのがいなければそこで削除です。

基本的には、書き込む側は、プログラムの起動時などに1回だけMemoryMappedFileを作成して、
メンバ変数などのプログラムの終了まで残るところに置いておき、
書き込むときにビューだけUsingするようにするのがいいかなと思います。
[ 親 93304 / □ Tree ] 返信 編集キー/

▲[ 93308 ] / 返信無し
■93309 / 4階層)  Re[4]: vb.net上からのメモリマップドファイル操作について
□投稿者/ 2400 (3回)-(2019/12/04(Wed) 11:34:58)
No93308 (Hongliang さん) に返信
> 例えば
> Using mmf As MemoryMappedFile = MemoryMappedFile.OpenOrCreate(...)
> ' 書き込み
> End Using
> なんてやってると、End Usingの時点でこのインスタンスはCloseされます。
> 他に開いているのがいなければそこで削除です。
>
> 基本的には、書き込む側は、プログラムの起動時などに1回だけMemoryMappedFileを作成して、
> メンバ変数などのプログラムの終了まで残るところに置いておき、
> 書き込むときにビューだけUsingするようにするのがいいかなと思います。

なるほど、それではその形式で試してみます。
ご指導ありがとうございました。
解決済み
[ 親 93304 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -