Write to a Mapped File
16872
50155
51100
26469
16873
56776
6257
28746
16877
34374
When Memory Is Mapped in Scalar Structure Format
When you map a file as a sequence of a single class (e.g., a sequence of
uint16
), you can use the following syntax to write matrix
X
to the file:
m.Data.f = X;
This statement is valid only if all of the following conditions are true:
• The file is mapped as containing multiple classes that do not repeat,
making
m.Data
ascalar structure.
• The class of
X
is the same as the class of
m.Data.f
.
• The number of elements in
X
equals that of
m.Data.f
.
This example maps a file as a 300-by-8 matrix of type
uint16
followed by
a200-by-5 matrix of type
double
,and then uses the syntax shown above
to write a matrix to the file.
m = memmapfile('records.dat',
...
'Format', {
...
'uint16' [300 8] 'x';
...
'double' [200 5] 'y' },
...
'Repeat', 1, 'Writable', true);
m.Data.x = ones(300, 8, 'uint16');
When Memory Is Mapped in Nonscalar Structure Format
When you map a file as a repeating sequence of multiple classes, you can
use the following syntax to write matrix
X
to the file, providing that
k
is a
scalar index:
m.Data(k).field = X;
To do this, the following conditions must be true:
9-35
Pdf thumbnail generator online - Library control API:C# PDF Thumbnail Create SDK: Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
www.rasteredge.com
Pdf thumbnail generator online - Library control API:VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
www.rasteredge.com
9
Memory-Mapping Data Files
• The file is mapped as containing multiple classes that can repeat, making
m.Data
anonscalar structure.
k
is a scalar index.
• The class of
X
is the same as the class of
m.Data(k).field
.
• The number of elements in
X
equals that of
m.Data(k).field
.
This example maps a file as a matrix of type
uint16
followed by a matrix of
type
double
that repeat 20 times, and then uses the syntax shown above
to write a matrix to the file.
m = memmapfile('records.dat',
...
'Format', {
...
'uint16' [25 8] 'x';
...
'double' [15 5] 'y' },
...
'Repeat', 20, 'Writable', true);
m.Data(12).x = ones(25,8,'uint16');
You can write to specific elements of field
x
as shown here:
m.Data(12).x(3:5,1:end) = uint16(500);
m.Data(12).x(3:5,1:end)
ans =
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
500
Select Appropriate Data Types
All of the usual MATLAB indexing and class rules apply when assigning
values to data via a memory map. The class that you assign to must be big
enough to hold the value being assigned. For example,
m = memmapfile('records.dat', 'Format', 'uint8', ...
'Writable', true);
d = m.Data;
d(5) = 300;
9-36
Library control API:VB.NET Image: Program for Creating Thumbnail from Documents and
multiple document and image formats, such as PDF, TIFF, GIF version of RasterEdge .NET Imaging SDK online and you can use the thumbnail creation control
www.rasteredge.com
Library control API:How to C#: Generate Thumbnail for Word
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. How to C#: Generate Thumbnail for Word.
www.rasteredge.com
Write to a Mapped File
saturates the
d
variable because
d
is defined as an 8-bit integer:
d(5)
ans =
255
Work with Copies of the Mapped Data
This example shows how to work with c
opies of the mapped data. The data
in variable
d
is a copy of the file dat
amapped by
m.Data(2)
.Because it is a
copy, modifying array data in
d
does
not modify the data contained in the file.
First, destroy the
memmapfile
ob
ject and restore the test file
records.dat
,
since you modified it by running t
he previous examples.
clear m
dmax32 = double(intmax('uint32'));
randData = gallery('uniformdata',[5000,1],0) * dmax32;
fid = fopen('records.dat','w');
fwrite(fid,randData,'double');
fclose(fid);
Map the file as a series of
uint16
and
double
matrices and make a copy of
m.Data(2)
in
d
.
m = memmapfile('records.dat',
...
'Format', {
...
'uint16' [5 8] 'x';
...
'double' [4 5] 'y' });
d = m.Data;
Write all zeros to the copy.
d(2).x(1:5,1:8) = 0;
d(2).x
ans =
0
0
0
0
0
0
0
0
9-37
Library control API:How to C#: Generate Thumbnail for PowerPoint
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. How to C#: Generate Thumbnail for PowerPoint.
www.rasteredge.com
Library control API:How to C#: Set Image Thumbnail in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. How to C#: Set Image Thumbnail in C#.NET
www.rasteredge.com
9
Memory-Mapping Data Files
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Verify that the data in the mapped file is not changed even though the copy of
m.Data(2).x
is written with zeros.
m.Data(2).x
ans =
35330
4902
31861
16877
23791
61500
52748
16841
51314
58795
16860
43523
8957
5182
16864
60110
18415
16871
59373
61001
52007
16875
26374
28570
16783
4356
52847
53977
16858
38427
16067
33318
65372
48883
53612
16861
18882
39824
61529
16869
9-38
Library control API:Create Thumbnail in Web Image Viewer | Online Tutorials
You Wish; Annotate & Redact Documents or Images; Create Thumbnail; NET; XDoc.Converter for .NET; XDoc.PDF for .NET; Reader for .NET; XImage.Barcode Generator for
www.rasteredge.com
Library control API:Create Thumbnail Winforms | Online Tutorials
Create Thumbnail; Generate Barcodes on Your Documents; Read Barcodes XDoc.Converter for .NET; XDoc.PDF for .NET; Reader for .NET; XImage.Barcode Generator for .NET
www.rasteredge.com
Delete a Memory Map
Delete a Memory Map
In this section...
“Ways to Delete a Memory Map” on page 9-39
“The Effect of Shared Data Copies On Performance” on page 9-39
Ways to Delete a Memory Map
It is not necessary to explicitly call a destructor method to clear a
memmapfile
object from memory when you no longer need it. MATLAB calls the destructor
for you whenever you do any of the following:
• Reassign another value to the
memmapfile
object’s variable
• Clear the object’s variable from memory
• Exit the function scope in which the object was created
The Effect of Shared Data Copies On Performance
When you assign the
Data
field of the
memmapfile
object to a variable,
MATLAB makes a shared data copy of the mapped data. This is very efficient
as no memory actually gets copied. In the following statement,
memdat
is a
shared data copy of the data mapped from the file:
memdat = m.Data;
When you finish using the mapped data, make sure to clear any variables
that shared data with the mapped file before clearing the object itself. If you
clear the object first, then the sharing of data between the file and dependent
variables is broken, and the data assigned to such variables must be copied
into memory before the object is destroyed. If access to the mapped file was
over a network, then copying this data to local memory can take considerable
time. So, if the statement shown above assigns data to the variable
memdat
,
you should be sure to clear
memdat
before clearing
m
when you are finished
with the object.
9-39
Library control API:How to C#: Generate Thumbnail for Raster
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. How to C#: Generate Thumbnail for Raster
www.rasteredge.com
Library control API:How to C#: Overview of Using XImage.Raster
Empower to navigate image(s) content quickly via thumbnail. Able to support text extract with OCR. You may edit the tiff document easily. Create Thumbnail.
www.rasteredge.com
9
Memory-Mapping Data Files
Share Memory Between Applications
This example shows how to implement two separate MATLAB processes that
communicate with each other by writing and reading from a shared file. They
share the file by mapping part of their memory space to a common location in
the file. A write operation to the memory map belonging to the first process
can be read from the map belonging to the second, and vice versa.
One MATLAB process (running
send.m
)writes a message to the file via its
memory map. It also writes the length of the message to byte 1 in the file,
which serves as a means of notifying the other process that a message is
available. The second process (running
answer.m
)monitors byte 1 and, upon
seeing it set, displays the received message, puts it into uppercase, and echoes
the message back to the sender.
Prior to running the example, copy the
send
and
answer
functions to files
send.m
and
answer.m
in your current working directory.
The send Function
This function prompts you to enter a string and then, using memory-mapping,
passes the string to another instance of MATLAB that is running the
answer
function.
functi
on send
% Inter
actively send a message to ANSWER using memmapfile class.
filena
me = fullfile(tempdir, 'talk_answer.dat');
% Crea
te the communications file if it is not already there.
if ~ex
ist(filename, 'file')
[f, ms
g] = fopen(filename, 'wb');
if f ~
= -1
fwri
te(f, zeros(1,256), 'uint8');
fclo
se(f);
else
err
or('MATLAB:demo:send:cannotOpenFile', ...
'Ca
nnot open file "%s": %s.', filename, msg);
end
en
d
9-40
Share Memory Between Applications
% Memory map the file.
m = memmapfile(filename, 'Writable', true, 'Format', 'uint8');
while true
% Set first byte to zero, indicating a message is not
% yet ready.
m.Data(1) = 0;
str = input('Enter send string (or RETURN to end): ', 's');
len = length(str);
if (len == 0)
disp('Terminating SEND function.')
break;
end
% Warn if the message is longer than 255 characters.
if len > 255
warning('ml:ml','SEND input will be truncated to 255 characters.');
end
str = str(1:min(len,255));
% Limit message to 255 characters.
len = length(str); % Update len if str has been truncated.
% Update the file via the memory map.
m.Data(2:len+1) = str;
m.Data(1)=len;
% Wait until the first byte is set back to zero,
% indicating that a response is available.
while (m.Data(1) ~= 0)
pause(.25);
end
% Display the response.
disp('response from ANSWER is:')
disp(char(m.Data(2:len+1))')
end
9-41
9
Memory-Mapping Data Files
The answer Function
The
answer
function starts a server that, using memory-mapping, watches
for a message from
send
.When the message is received,
answer
replaces the
message with an uppercase version of it, and sends this new message back to
send
. To use
answer
,call it with no inputs.
function answer
% Respond to SEND using memmapfile class.
disp('ANSWER server is awaiting message');
filename = fullfile(tempdir, 'talk_answer.dat');
% Create the communications file if it is not already there.
if ~exist(filename, 'file')
[f, msg] = fopen(filename, 'wb');
if f ~= -1
fwrite(f, zeros(1,256), 'uint8');
fclose(f);
else
error('MATLAB:demo:answer:cannotOpenFile', ...
'Cannot open file "%s": %s.', filename, msg);
end
end
% Memory map the file.
m = memmapfile(filename, 'Writable', true, 'Format', 'uint8');
while true
% Wait until the first byte is not zero.
while m.Data(1) == 0
pause(.25);
end
% The first byte now contains the length of the message.
% Get it from m.
msg = char(m.Data(2:1+double(m.Data(1))))';
% Display the message.
9-42
Share Memory Between Applications
disp('Received message from SEND:')
disp(msg)
% Transform the message to all uppercase.
m.Data(2:1+double(m.Data(1))) = upper(msg);
% Signal to SEND that the response is ready.
m.Data(1) = 0;
end
Running the Example
To see what the example looks like when it is run, first, start two separate
MATLAB sessions on the same computer system. Call the
send
function with
no inputs in one MATLAB session. Call the
answer
function in the other
session, to create a map in each of the processes’ memory to the common file.
Run
send
in the first MATLAB session.
send
Enter send string (or RETURN to end):
Run
answer
in the second MATLAB session.
answer
ANSWER server is awaiting message
Next, enter a message at the prompt displayed by the
send
function. MATLAB
writes the message to the shared file. The second MATLAB session, running
the
answer
function, loops on byte 1 of the shared file and, when the byte is
written by
send
,
answer
reads the message from the file via its memory map.
The
answer
function then puts the message into uppercase and writes it back
to the file, and
send
(waiting for a reply) reads the message and displays it.
send
writes a message and reads the uppercase reply.
Hello. Is there anybody out there?
response f
rom ANSWER is:
HELLO. IS T
HERE ANYBODY OUT THERE?
9-43
9
Memory-Mapping Data Files
Enter send string (or RETURN to end):
answer
reads the message from
send
.
Received message from SEND:
Hello.
Is there anybody out there?
Enter a second message at the prompt display by the
send
function.
send
writes the second message to the file.
I received your reply.
response from ANSWER is:
I RECEIVED YOUR REPLY.
Enter send string (or RETURN to end):
answer
reads the second message, put it into uppercase, and then writes
the message to the file.
Received message from SEND:
I received your reply.
In the first instance of MATLAB, press Enter to exit the example.
Terminating SEND function.
9-44
Documents you may be interested
Documents you may be interested