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 | 4464 (1544) | Mrch |
» | C# in slika iz kamereOddelek: Programiranje | 1413 (1297) | ql000 |
» | [C#] IndexOutOfRange ExceptionOddelek: Programiranje | 1345 (1190) | ql000 |
» | [C#] Sesutje aplikacijeOddelek: Programiranje | 1685 (1520) | Jean-Paul |
» | [C#] unmanaged->managed codeOddelek: Programiranje | 2191 (2066) | Zzzzzzz |