Click here to Skip to main content
15,885,835 members
Articles / Programming Languages / Visual Basic
Article

Using FileMapping on .NET as IPC

Rate me:
Please Sign up or sign in to vote.
3.00/5 (9 votes)
21 Jan 20071 min read 71.2K   406   25   12
Sample code for using FileMapping on .NET.

Introduction

.NET inter-process mechanisms are very slow. With some system calls, it becomes easy to use file mapping and that's the faster mechanism for IPC.

Classes

  • MemMap

    This class encapsulates a file mapping zone with system page-file support. All you need to do is give it a name and size.

    Usage:

    VB
    'Process 1
    dim mem1 as MemMap=new MemMap("ZONE1",2048) 
    mem1.writeString(0,"String to share")
    
    'Process 2
    dim mem1 as MemMap=new MemMap("ZONE1",2048) 
    dim sharedString=mem1.readString(0)
    
    mem1.close() 'at the end of both programs

    This class handles the creation or reuse of file mapping within the "new" method and has methods for reading and writing integers and strings on a given offset.

    It gives also a locking function based on InterLockedExchanged with protection against process elimination while having holding a lock.

     

  • MemChannel

    This class uses the MemMap class to implement a FIFO queue of strings. You can create any number of channels by simply giving different names to each one of them.

    Usage:

    VB
    'Process1
    dim cha1 as MemChannel=new MemChannel("CHANAME1") 
    cha1.putMsg("This is the message")
    
    'Process2
    dim cha1 as MemChannel=new MemChannel("CHANAME1") 
    msgbox cha1.getMsg()
    
    cha1.close() 'at the end of both programs

EXEs

  • MServer.exe

    Example of a server reading from a channel.

  • Client.exe

    Example of a client writing to a channel.

Points of interest

The sample programs included here runs at 250.000 msgs per second on a PIV 3 GHz. But they block each other while accessing the channel and the CPU is not 100% busy.

With MemMap class support, it becomes easy to implement other IPC mechanisms as shared Dictionaries.

History

  • 25-06-2005 - First version.
  • 20-01-2007 - Second version

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Spain Spain
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalwith read from C++ program Pin
ftaka29-Apr-08 21:06
ftaka29-Apr-08 21:06 
GeneralCode corrected and revised Pin
aalday21-Jan-07 20:18
aalday21-Jan-07 20:18 
GeneralSomething wrong Pin
Alexey_i21-Oct-06 1:33
Alexey_i21-Oct-06 1:33 
GeneralRe: Something wrong Pin
aalday21-Jan-07 20:16
aalday21-Jan-07 20:16 
GeneralFaster implementation Pin
studio_ukc28-Sep-06 8:18
studio_ukc28-Sep-06 8:18 
QuestionCopyright/Usage? Pin
brian_birtle6-Nov-05 6:25
brian_birtle6-Nov-05 6:25 
AnswerRe: Copyright/Usage? Pin
aalday6-Nov-05 9:29
aalday6-Nov-05 9:29 
GeneralNext time post in proper category Pin
fwsouthern25-Jun-05 19:51
fwsouthern25-Jun-05 19:51 
GeneralRe: Next time post in proper category Pin
aalday25-Jun-05 21:28
aalday25-Jun-05 21:28 
GeneralFORTRAN Pin
Anonymous25-Jun-05 13:23
Anonymous25-Jun-05 13:23 
GeneralSeems great Pin
Daniel Turini25-Jun-05 12:26
Daniel Turini25-Jun-05 12:26 
GeneralRe: Seems great Pin
aalday25-Jun-05 21:40
aalday25-Jun-05 21:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.