Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 122347
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T04:06:52+00:00 2026-05-11T04:06:52+00:00

I have a C++ method signature that looks like this: static extern void ImageProcessing(

  • 0

I have a C++ method signature that looks like this:

    static extern void ImageProcessing(         [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage,         [MarshalAs(UnmanagedType.LPArray)]ushort[] outImage,         int inYSize, int inXSize); 

I’ve wrapped the function in timing methods, both internal and external. Internally, the function is running at 0.24s. Externally, the function runs in 2.8s, or about 12 times slower. What’s going on? Is marshalling slowing me down that much? If it is, how can I get around that? Should I go to unsafe code and use pointers or something? I’m sort of flummoxed as to where the extra time cost is coming from.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T04:06:52+00:00Added an answer on May 11, 2026 at 4:06 am

    The answer is, sadly, far more mundane than these suggestions, although they do help. Basically, I messed up with how I was doing timing.

    The timing code that I was using was this:

    Ipp32s timer; ippGetCpuFreqMhz(&timer); Ipp64u globalStart = ippGetCpuClocks(); globalStart = ippGetCpuClocks() *2 - globalStart; //use this method to get rid of the overhead of getting clock ticks        //do some stuff  Ipp64u globalEnd = ippGetCpuClocks();  globalEnd = ippGetCpuClocks() *2 - globalEnd; std::cout << 'total runtime: ' << ((Ipp64f)globalEnd - (Ipp64f)globalStart)/((Ipp64f)timer *1000000.0f) << ' seconds' << std::endl; 

    This code is specific to the intel compiler, and is designed to give extremely precise time measurements. Unfortunately, that extreme precision means a cost of roughly 2.5 seconds per run. Removing the timing code removed that time constraint.

    There still appears to be a delay of the runtime, though– the code would report 0.24 s with that timing code on, and is now reporting timing of roughly 0.35s, which means that there’s about a 50% speed cost.

    Changing the code to this:

      static extern void ImageProcessing(      IntPtr inImage, //[MarshalAs(UnmanagedType.LPArray)]ushort[] inImage,      IntPtr outImage, //[MarshalAs(UnmanagedType.LPArray)]ushort[] outImage,      int inYSize, int inXSize); 

    and called like:

            unsafe {             fixed (ushort* inImagePtr = theInputImage.DataArray){                 fixed (ushort* outImagePtr = theResult){                     ImageProcessing((IntPtr)inImagePtr,//theInputImage.DataArray,                         (IntPtr)outImagePtr,//theResult,                         ysize,                         xsize);                 }             }         } 

    drops the executable time to 0.3 s (average of three runs). Still too slow for my tastes, but a 10x speed improvement is certainly within the realm of acceptability for my boss.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 150k
  • Answers 150k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Use Google Analytics! Link here Totally free, better than anything… May 12, 2026 at 9:42 am
  • Editorial Team
    Editorial Team added an answer You could solve the problem, by using an array for… May 12, 2026 at 9:42 am
  • Editorial Team
    Editorial Team added an answer Debug mode doesn't "let bugs slip past you". It inserts… May 12, 2026 at 9:42 am

Related Questions

I am implementing a piece of Java software that will hopefully allow for C
I have two C DLLs that I need to access in the same executable.
As I try to modernize my C++ skills, I keep encountering this situation where
I consider fluent interfaces very convenient for many tasks. But I feel uneasy when

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.