Click here to Skip to main content
6,291,124 members and growing! (17,656 online)
Email Password   helpLost your password?
Desktop Development » Files and Folders » Files     Intermediate

Using FileMapping on .NET as IPC

By aalday

Sample code for using FileMapping on .NET.
VB, Windows, .NET 1.1VS.NET2003, Dev
Posted:25 Jun 2005
Updated:21 Jan 2007
Views:35,025
Bookmarked:21 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
9 votes for this article.
Popularity: 2.86 Rating: 3.00 out of 5
3 votes, 33.3%
1

2
2 votes, 22.2%
3
1 vote, 11.1%
4
3 votes, 33.3%
5

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:

    '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:

    '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

About the Author

aalday


Member

Occupation: Web Developer
Location: Spain Spain

Other popular Files and Folders articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 12 of 12 (Total in Forum: 12) (Refresh)FirstPrevNext
Generalwith read from C++ program Pinmemberftaka22:06 29 Apr '08  
GeneralCode corrected and revised Pinmemberaalday21:18 21 Jan '07  
GeneralSomething wrong PinmemberAlexey_i2:33 21 Oct '06  
GeneralRe: Something wrong Pinmemberaalday21:16 21 Jan '07  
GeneralFaster implementation Pinmemberstudio_ukc9:18 28 Sep '06  
GeneralCopyright/Usage? Pinmemberbrian_birtle7:25 6 Nov '05  
GeneralRe: Copyright/Usage? Pinmemberaalday10:29 6 Nov '05  
GeneralNext time post in proper category Pinmemberfwsouthern20:51 25 Jun '05  
GeneralRe: Next time post in proper category Pinmemberaalday22:28 25 Jun '05  
GeneralFORTRAN PinsussAnonymous14:23 25 Jun '05  
GeneralSeems great PinmemberDaniel Turini13:26 25 Jun '05  
GeneralRe: Seems great Pinmemberaalday22:40 25 Jun '05  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 21 Jan 2007
Editor: Chris Maunder
Copyright 2005 by aalday
Everything else Copyright © CodeProject, 1999-2009
Web16 | Advertise on the Code Project