Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C# (http://www.go4expert.com/forums/c-sharp/)
-   -   Unmanaged Code slower than Managed Code! (http://www.go4expert.com/forums/unmanaged-code-slower-managed-code-t16161/)

Frankie-T 12Feb2009 20:41

Unmanaged Code slower than Managed Code!
 
Hi Experts,
I'm trying to get into unmanaged DLLs and implementing them into C#-programs.
The reason is simply to enhance the performance of a algorithm.

So, getting into the basics I tried to test the speed by creating a for-loop, which counts up to a high value and returns a boolean parameter.
Strangley the for-loop in the C#-Form runs faster, than the loop inside the dll (round 10% faster, I'd say).

Here's the code:


Code:

DLL
Code:

// DLL_Test_1.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
//
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
 
BOOL APIENTRY DllMain( HMODULE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
      )
{
    return TRUE;
}
extern "C" __declspec(dllexport) int Rechnen(int Zahl1, int Zahl2);
extern "C" __declspec(dllexport) bool forSchleife(int hoehe);
 
int Rechnen(int Zahl1, int Zahl2)
{
 int Zahl3 = Zahl1+Zahl2;
 return (Zahl3);
}
bool forSchleife(int hoehe)
{
 int i;
 bool fertig = false;
 
 for(i = 0; i < hoehe; i++)
 {
  int testZahl = i;
 }
 
 fertig = true;
 return (fertig);
}
 
#ifdef _MANAGED
#pragma managed(pop)
#endif

Form
Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace DLL_Benutzen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            textBox4.Text = "---------";
            Boolean Ready = DLLTest.forSchleife(1000000000);
            textBox4.Text = Ready.ToString();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            textBox5.Text = " ";
            Boolean managedReady = forSchleifeManaged(1000000000);
            textBox5.Text = managedReady.ToString();
        }
        public Boolean forSchleifeManaged(int hoehe)
        {
            Boolean managedFertig = false;
            for (int i = 0; i < 1000000000; i++)
            {
                int test = i;
            }
            managedFertig = true;
            return (managedFertig);
        }
 
    }
    static class DLLTest
    {
        [DllImport(@"DLL_Test_1.dll")]
        public static extern bool forSchleife(int hoehe);
    }
}


Thanks for your help.
Frankie-T

shabbir 12Feb2009 20:58

Re: Unmanaged Code slower than Managed Code!
 
This is very much a possibility and I would not disagree but the speed is not only determined for running the for loop.

First why you get unexpected results as per your requirements is better use of memory and cache by the managed code.

The speed of the program should be done from the time loader starts loading the program into memory to exit of the program and there you would see the difference.

C# programs I have seen load faster second time than first time and so now you can safely assume why.

Frankie-T 12Feb2009 21:39

Re: Unmanaged Code slower than Managed Code!
 
Hi,
thats disapointing.

See, my problem is, that I have to fill a buffer with an image.
It's huge (about 2000x5000px) and therefor it takes a while to fill the buffer.

My idea was to bring the filling of the buffer into unmanaged code.

Any idea how I could realize that?



Frankie-T

shabbir 12Feb2009 22:00

Re: Unmanaged Code slower than Managed Code!
 
Unless compelled try avoiding mixture of managed and un-managed code.

If you have some well tested un-managed code use it but do not try to develop both of them as switching can kill many things and specially time.


All times are GMT +5.5. The time now is 11:18.