Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / Interop / February 2006

Tip: Looking for answers? Try searching our database.

Looping memory array in C#

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Totto - 17 Feb 2006 16:56 GMT
Hi all,
I'm calling a win32 function from C#  that returns a far pointer to an array
of data.
The looping in C goes like this:

pSint8 = (char* )pData;
pSint16 = (Int16*)pData;
pSint32 = (Int32*)pData;
pFloat = (float*)pData;
for (j = 0 ; j < numb ; j++)
{
   switch (DataType)
   {
       case dtSINT8:
           fVal = (float)(*pSint8++);
           break;
        case dtSINT16:
           fVal = (float)(*pSint16++);
           break;
       case dtSINT32:
           fVal = (float)(*pSint32++);
           break;
       case dtFLOAT:
           fVal = (*pFloat++);
           break;
   }
}

Is it possible to do this looping i C# without going to unsafe code?

Regards Totto
Mattias Sjögren - 18 Feb 2006 23:22 GMT
>Is it possible to do this looping i C# without going to unsafe code?

Well you can use Marshal.Copy to bring the whole array into managed
memory at once and then iterate through that.

Mattias

Signature

Mattias Sjögren [C# MVP]  mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.

Totto - 19 Feb 2006 15:49 GMT
Thanks Mattias,
Do you know if there is a big performance penalty doing it this way opposed
to using unsafe code and pointer arithmetic?

Totto

>>Is it possible to do this looping i C# without going to unsafe code?
>
> Well you can use Marshal.Copy to bring the whole array into managed
> memory at once and then iterate through that.
>
> Mattias
Mattias Sjögren - 21 Feb 2006 22:30 GMT
>Do you know if there is a big performance penalty doing it this way opposed
>to using unsafe code and pointer arithmetic?

I wouldn't think so but I suggest you measure it. Since you're making
a copy of the data, you'll of course double the amount of memory you
need.

Mattias

Signature

Mattias Sjögren [C# MVP]  mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.