» »

[C# in Microsoft Visual Studio 2005] Mešetarjenje z vektorji

[C# in Microsoft Visual Studio 2005] Mešetarjenje z vektorji

ql000 ::

Moje delo z vektorji se mimogrede nanaša na to, da kopiram nek majhen vektor (recimo, da izgleda tako: X0Y0Z0X1Y1Z1...) v nek večji vektor, katerega velikost je n večkratnik malega vektorja, kar pomeni, da npr. veliki vektor izgleda nekako tako: X0Y0Z0X1Y1Z1....X0Y0Z0X1Y1Z1.

Zdej me pa zanima, pravzaprav je bolj firbec:
Jaz lahko to počnem na 2 načina. Pač najbolj evidenten način je seveda z for zankami. Glede na zgornji primer recimo potrebujem 2 for zanki. Nekaj podobnega sem že kracal tlele po forumu v mojem prejšnjem postu. Na netu sem pa opazil tudi alternative z uporabo razreda Marshall (using System.Runtime.InteropServices).

Tukaj je zgodba načeloma taka:
Imaš mali vektor, veliki vektor, ki je n kratnik malega, potem pa imaš še kazalec IntPtr, ki služi kot vmesni buffer v katerega naložiš mali vektor in, katerega vsebino kopiramo v večji vektor.


1. primer z for zankami:

// Naložim posamezne vektorje profilov v večji vektor
         for (i = 0; i < FrameNo; i++)
         {
                k = 0;
                for (j = i * 640; j < i * 640 + 640; j++ )
                {

                    DetectedLineVector[j] = DetectedLine[k];
                    k = k + 1;

                    switch(k)
                    {
                        case 640:
                            k = 0;
                        break;
                    }
                }
          }



in alternativa z uporaba Marshall razreda (moja metoda, ki prikazuje realizacijo te ideje):
public Int32[] Int32SArray2BArraycopy(Int32 MamaArraySize, Int32[] ChildArray)
        {
            Int32[] MamaArray = new Int32[MamaArraySize];
            IntPtr InterfacePointer = Marshal.AllocHGlobal(4 * ChildArray.Length);
            UInt16 i;

            Marshal.Copy(ChildArray, 0, InterfacePointer, ChildArray.Length);

            for (i = 0; i < (MamaArraySize / ChildArray.Length); i++)
            {
                Marshal.Copy(InterfacePointer, MamaArray, i * ChildArray.Length, ChildArray.Length);
            }

            return MamaArray;
        }




Zdej pa mene zanima, katera od teh metod je boljša iz raznih stališč (hitrost... ipd.)?

P.S.
Upam, da sem bilj dost jasen! :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Simobilov Glasnik

Oddelek: Programiranje
134338 (1418) Mrch
»

C# in slika iz kamere

Oddelek: Programiranje
61352 (1236) ql000
»

[C#] IndexOutOfRange Exception

Oddelek: Programiranje
81303 (1148) ql000
»

[C#] Sesutje aplikacije

Oddelek: Programiranje
111621 (1456) Jean-Paul
»

[C#] unmanaged->managed code

Oddelek: Programiranje
112142 (2017) Zzzzzzz

Več podobnih tem