Forum » Programiranje » [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:
in alternativa z uporaba Marshall razreda (moja metoda, ki prikazuje realizacijo te ideje):
Zdej pa mene zanima, katera od teh metod je boljša iz raznih stališč (hitrost... ipd.)?
P.S.
Upam, da sem bilj dost jasen!
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!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Simobilov GlasnikOddelek: Programiranje | 4338 (1418) | Mrch |
» | C# in slika iz kamereOddelek: Programiranje | 1352 (1236) | ql000 |
» | [C#] IndexOutOfRange ExceptionOddelek: Programiranje | 1303 (1148) | ql000 |
» | [C#] Sesutje aplikacijeOddelek: Programiranje | 1621 (1456) | Jean-Paul |
» | [C#] unmanaged->managed codeOddelek: Programiranje | 2142 (2017) | Zzzzzzz |