- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- bambano: Bambanő háza tája
- Gurulunk, WAZE?!
- gban: Ingyen kellene, de tegnapra
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Geri Bátyó: B550 szűk keresztmetszet, de mi és miért?
- Szoszo94: Xiaomi Mi Router 3G - Padavanra fel!
- Chosen: Canon 5D II - portrézás 2025-ben
Új hozzászólás Aktív témák
-
martonx
veterán
Még mindig nem értelek. Memóriában azt csinálsz, amit akarsz. A DB kapcsolatnak kétszer kell élőnek lennie. Egyszer, mikor lekéred az adatokat, és egyszer, amikor elmented a dataset változásait.
Akkor most mi a probléma?
Várj, kezdem kapizsgálni! Téged nem az zavar, hogy élő, vagy nem a DB kapcsolat. Te konkrétan dataset-es példákat, tutorialokat keresel. Ez esetben a gugli és az msdn a barátod.
Még annyit jegyeznék meg, hogy mostanra dataset helyett érdemes entity framework-öt használni. -
Cyno
tag
válasz
martonx #3297 üzenetére
drkbl: Köszi a választ!
Teljesen alap dolgokat szeretnék.
Forms alkalmazás, ami(nagyoltan) gombnyomásokra beilleszteni, lekérdezne és törölne az adatbázisban.
Ezt ugye az átlag user, mint én is SQL-el tudja megvalósítani.
Ezért szeretnék én SQL parancsokkal operálni dataset esetén.
Igazából mindegy lenne, hogy bontott vagy élő kapcsolat az esetemben, csak a VS varázslója dataset-tel hozza létre, és akkor már(első blikkre) egyszerűbb lenne ezt használni.
Erre írtam, hogy én nem tudtam megoldani.
pl.:
élő kapcsolat esetén
string sql=string.format("Update Inventory Set Name='{0}' Where ID= '{1}",newName, id);
using(SqlCommand cmd= new SqlCommand(sql, this.sqlCn))
{cmd.ExecuteNonQuery();}
Ti, hogy valósítanátok meg dataset esetén? Pl.: egy textboxból bekéri mondjuk az ID-t, és abban a sorban módosít egy értéket(button_clickre) -
Cyno
tag
Bontott kapcsolat esetén, DataSet stb. tényleg nem lehet SQL utasításokat átadni, vagy csak én nem találom módját?
.Select metódus tudom, hogy van, de azért ez nem ugyanaz.
Egy megoldást találtam LINQ to SQl, talán ez van a legközelebb hozzá.(És itt még az entitás osztályokkal lehetne játszani)
Nem tudom mennyire érthető. Arra gondolok, mint az élőkapcsolatnál:
string sql="Select * From [Table]";
SqlCommand cmd= new SqlComman(sql,(kapcsolat)); -
válasz
WonderCSabo #3291 üzenetére
Nem lehet valahogy az editorban visszatenni a régi 2010-es témát? a világos téma vakít, a dark meg az editort cseszi el.
Valahogy nincs kedvem egyesével beállítani mindent.
-
Jester01
veterán
válasz
Gülredy #3289 üzenetére
Miért nem mondod egyszerűen, hogy lottó program kell
Ez amúgy totál triviális feladat. Véletlenszám generálást már ezerszer elmondtuk, és nem is az "a program lényege". A gyakoriság is nagyon egyszerű, fogsz egy 90 elemű tömböt és (akár menet közben) nyilvántartod benne hogy a számok hányszor fordultak elő. Végül megkeresed benne az 5 legkisebbet.
-
Gülredy
tag
Sziasztok!
Arra kérnék tőletek ötleteket, hogy c#-ban, hogyan oldanátok meg egy olyan programot, amely előállítana több száz olyan random számsorozatot 1-90-ig (tömbben vagy bármi másban), amelynek van legalább 5 eleme, és minden elem különböző egymástól (egy számsorozatban). De mondjuk az n-edik és k-adik számsorozatban lehet két, vagy több elem is ugyan olyan, arra nincs megkötés!
Például:
első számsorozat: 2,21,43,67,82
Második számsorozat: 4,7,43,36,90
...
így tovább míg nincs neki legalább száz vagy akár több ilyen sorozata.De most jönne a program lényege:
Ezekre a sorozatokra, generáljon EGY olyan sorozatot, amelynek elemei a legkevesebbszer vagy egyáltalán nem fordulnak elő, az előző sorozatokban. -
martonx
veterán
válasz
Jhonny06 #3284 üzenetére
Használtad a VS2010-et ASP.NET-es fejlesztéskhez? Mert akkor tudod, hogy a HTML, js, css intellisense-e igencsak gyenge volt. Ez mostmár a múlté. Ehhez képest került még bele egy firebug szerű futásidejű web developer eszköz, amiben a DOM elemek módosításakor a mögötte lévő kódod is módosul. Ezek nagy nullák lennének?
Mint mondtam a VS2012 ASP.NET-re koncentrál. Ne WPF-es, meg silverlight-os, meg konzolos, meg winforms-os újdonságokat várjunk bele. -
martonx
veterán
válasz
WonderCSabo #3285 üzenetére
ez irónia volt. A csodavárást nem értem. Milyen csodára vártunk? Illetve komolyan, ki milyen csodára várt VS2012-ben?
Én egy erős, grafikus HTML - CSS szerkesztőt el bírtam volna képzelni benne. És ti? Mit vártatok bele, amitől most fanyalogtok? -
Jhonny06
veterán
válasz
martonx #3281 üzenetére
Egy IntelliSense-hez vagy IntelliTrace-hez képest ezek az új feature-ök századrangú fejlesztéseknek tűnnek és azok is. Tehát egy 2005-ről 2008-ra vagy 2008-ról 2010-re való lépéshez képest ez így nulla.
"Miben tudjon többet a VS2012 ilyen fejlesztéskor, mint a VS2010"
Semmiben, mint ahogy nem is írtam ilyen. Mindenre kiterjedő, tényleg hasznos újításokat kell (kéne) beletenni, mint pl. a fentebb említett dolgok.
-
martonx
veterán
válasz
Jhonny06 #3276 üzenetére
Azért webfejlesztőként óriási az előrelépés a VS2010-hez képest. Minden más, ami nem webfejlesztéshez, meg win8 Metro-hoz kapcsolódik, háttérbe szorulóban van.
Nem csoda, hogy az MS sem fog csodát művelni mondjuk a konzol alkalmazások fejlesztő környezetén.
Fordítsuk meg a dolgot. Te mit várnál pluszban egy winforms, vagy egy konzol alkalmazás fejlesztésekor? Miben tudjon többet a VS2012 ilyen fejlesztéskor, mint a VS2010 (mondjuk írhattam volna akár VS2005-öt is)? -
fatal`
titán
válasz
WonderCSabo #3277 üzenetére
Ez valami hányás.
-
-
kingabo
őstag
válasz
WonderCSabo #3277 üzenetére
"The owner of this website (www.winbeta.org) does not allow hotlinking to that resource"
Akikkel én beszéltem erről, mind ugyanezen a véleményen vannak a felülettel kapcsolatban.
-
WonderCSabo
félisten
Sztem borzalmas lett az új felület, mintha visszaugrottunk volna az időben.
-
j0k3r!
őstag
akit esetleg erdekel: Visual Studio 2012 RC
-
DopeBob
addikt
Sziasztok,
milyen könyvet tudnátok ajánlni, a C# megismeréséhez? A C# mesteri szinten 21 nap alatt megfelelő lehet még ma is induláshoz?
Esetleg a Head First C#? Illetve tovább haladni milyen könyvekkel érdemes?
Illetve egy bónusz kérdés: már nem számítok kimondottan fiatalnak, viszont szeretnék majd ilyen területen elhelyezkedni pár év múlva. Nyilván nem sok tapasztalatom lesz. Lehet esetleg valahol fellelni C# projeckteket ahová be lehet szálni, hogy legalább valami referenciám legyen?
Programozás általában ok, OO alapok is szerintem ok, bár már elég régen foglalkoztam ilyesmivel
-
biigi
tag
válasz
atti1848 #3264 üzenetére
Amennyiben adatokat csak a játék indítása előtt vársz, akkor a legtisztább megoldás ha a játékForm construktorába paraméterként megadod a formról az adatokat.
Ha játék során is szeretnél adatokat kapni akkor a játékform osztályban minden adathoz létre kell hozni Propertiket és azok változásaira reagálnék (set).
Nem biztos hogy ez a legjobb módszer de én így csinálnám. -
atti1848
senior tag
Sziasztok.
Amit most akarok kérdezni azt eddig sosem tudtam megérteni és reménykedek benne,hogy ti eltudjátok úgy mondani,hogy megértsem.
Adott 2db Form: Kezdő Form ( amin beállítunk pl:nevet(textbox), listbox(számok), combobox,stb) és van a másik a JátékForm, amin folyna a játék vagy akármi.
Az lenne a kérdésem,hogy pl, ha azt akarnám vizsgálni,hogy a listboxban mi van kiválasztva és annak hatására szeretném índitani a játékot, azt hogy tudom megoldani, azaz hogy tudok hivatkozni a KezdőForm -on lévő listboxban kiválasztott elemre,hogy a JátékForm annak a feltételnek eleget téve induljon?
Pl-val: a listboxban lehet választani 1,2,3 közül. ezek azt szeretnék jelenteni,hogy ha 1-t választ az illető akkor 1db nyíl repüljön a JátékFormon, ha 2 akkor 2 repüljön,stb.
Elég kusza,de remélem érthető,hogy mégis mit szeretnék. De úgy mindennel,nem csak a listboxal.
Válaszokat előre köszönöm.
-
Nem akarok beleszólni, de: "C,C++,C# és/vagy" Nem tudjátok eldönteni, mi kell vagy ennyihez kell érteni és még máshoz is? Ha előbbi, az baj, ha utóbbi, akkor annyit fog kérni, ha lesz egyáltalán jelentkező, amennyit tanácsadók szoktak keresni. Manapság sajnos nagyon kevés a jól megfogható álláshirdetés, pedig azokra harap a nép, mert mindenki szereti tudni, mit várnak el tőle, sallangok nélkül.
Programozó és programozó között ég és föld a különbség. Célzottabban kell keresni. Én is rengeteg ajánlatot kapok fejvadász cégektől olyan hirdetésekkel, amelyekben egyáltalán szerepel a fejlesztő vagy programozó szó. Nagy hiba, mert ezekhez a fejvadászokhoz nem fogok visszamenni. Elvárom, hogy ha egy adott területen keresnek jelöltet, az arra a területre jellemző 3 betűs rövidítéseknek legalább egy részével legyenek tisztában és legalább azt tudják, ők maguk mit akarnak.
-
Jester01
veterán
Nem zavar nagyon de erre van ám az állásbörze fórum.
-
Gibkey
tag
Sziasztok, C,C++,C# és/vagy MQL4-hez értő programozókat keresünk az új projectünkhöz. Akit érdekelne esetleg az keressen meg privatban.
Nem reklámnak szántam, akit sért vagy zavarja a kiírásom utólagosan is elnézést kérek. Gondoltam itt találok olyan programozót, aki épp munka hiányban szenved.
-
ArchElf
addikt
válasz
Gülredy #3257 üzenetére
De az érthetőség kedvéért while ciklussal is berakom
static string RandomizeWhile(string text)
{
Random rnd = new Random();
StringBuilder sbIn = new StringBuilder(text);
StringBuilder sbOut = new StringBuilder();
while(sbIn.Length > 0)
{
int rNumber = rnd.Next(sbIn.Length);
sbOut.Append(sbIn[rNumber]);
sbIn.Remove(rNumber, 1);
}
return sbOut.ToString();
}Amúgy ez lassabb megoldás (mivel az sbIn.Length értékét minden ciklusban kétszer is ki kell értékelni).
AE
-
Gülredy
tag
válasz
ArchElf #3256 üzenetére
Köszönöm a gyors választ!
Azt hittem, bonyolultabb megoldása lesz!
Legalábbis ha jól értelmezem, úgy működik, hogy a bekért string-et a bemeneti StringBuilder-be rakom, majd for ciklussal a szöveg hossza-tól az elejéig végigmegyek, majd a ciklusban generálok egy random számot, amely szám, a szöveg-edik karakterének felel meg, és aminek az értékét hozzáfűzi a kimeneti StringBuilder-hez, közben a bemenetiből pedig kivonja?Annyi kérdésem lenne, hogy a for ciklust miért a végéről az elejére megy miért nem fordítva? (úgy látom fordítva system out of range exeption-t kap de miért?)
-
ArchElf
addikt
válasz
Gülredy #3255 üzenetére
static string Randomize(string text)
{
Random rnd = new Random();
StringBuilder sbIn = new StringBuilder(text);
StringBuilder sbOut = new StringBuilder();
for (int ix = text.Length; ix > 0 ; ix--)
{
int rNumber = rnd.Next(ix);
sbOut.Append(sbIn[rNumber]);
sbIn.Remove(rNumber, 1);
}
return sbOut.ToString();
}AE
-
Gülredy
tag
Sziasztok!
Volna egy feladatom, amire van is megoldásom, de szerintem túl van bonyolítva, és megoldható lenne könnyebben(rövidebben) is. Erre kérném a segítségeteket:A feladat:
"Írjon olyan függvényt vagy metódust, amely egy karakterláncban vagy sztringben
véletlenszerűen összekeveri a karaktereket (véletlenszám–generátor használható)!"
Kikötés, hogy "Tilos olyan függvényt/metódust használni, mely közvetlenül a megoldást adja!"Szóval van nekem 3 féle programnyelvben is megoldás, egy c, java, meg c#-os is.
A c#-osat bemásolom ide, mert abban érdekelne egy rövidebb megoldás, ha ti tudtok rá egyet. Személy szerint egy StringBuilder + Random szám generátorban gondolkoztam, de igazából StringBuilderrel még nem sokat foglalkoztam így nem tudom hogy is nézzen ki a megoldás.class Program
{
static void keveres(string szoveg)
{
Random szam = new Random();
int hossz= szoveg.Length;
int[] szamok = new int[hossz];
bool voltmar;for (int i = 0; i < hossz; i++)
{
do{
voltmar = false;
szamok = szam.Next(0,hossz);
for (int j = 0; j < i; j++)
{
if (szamok(i)==szamok[j])
{
voltmar=true;
}
}
} while (voltmar==true);
}
char[] kevert = new char[hossz];
for (int i = 0; i < hossz; i++)
{
kevert(i)=szoveg[szamok(i)];
}
for (int i = 0; i < hossz; i++)
{
Console.Write(kevert(i));
}}
static void Main(string[] args)
{
Console.WriteLine( "Adjon meg egy karakterláncot majd véletlenszerűen összekeverve megkapja:");
string szo = Console.ReadLine();
keveres(szo);
Console.ReadKey();
}Létezik rá egy rövidebb megoldás amely ugyan ezt a funkciót elvégzi?
Előre is köszönöm a válaszokat!
-
almi
senior tag
Sziasztok!
Van egy C# programom. Nem nagy, 300 sor maximum. Nem nagyon vagyok tisztában még a C# dolgaival, valakinek lenne egy fél órája privátban, megválaszolni pár kérdést?
Köszönöm.
Üdv,
almi. -
ArchElf
addikt
Tárold el az eredeti sorrendet valahol (pl a Tag property-ben) és rendezz aszerint. A ListBox-nak nincs "eredeti" sorrendje, mindig csak az aktuális van.
A Sorted property amúgy arra jó, hogy nem csak sorbarakja a listát, de az ]j elemeket is sorreendbe rakva adja hozzá.AE
-
n00n
őstag
Van egy ListBox-om (Visual C#) amibe x db nevet töltök. Van kettő gombom, az egyik ABC sorrendbe állítja (ListBox_neve.Sorted = true) a neveket, a másik hatására rendezetlené kellene válnia. Viszont a rendezetlenséget hogyan lehet megoldani? A ListBox_neve.Sorted = false nem működik. Ötlet?
-
kingabo
őstag
válasz
WonderCSabo #3243 üzenetére
Ebben az esetben nem ért egy + védelem, hogy 2* kattintott-e ugyanarra, mert a feltételed akkor is teljesül.
-
trisztan94
őstag
válasz
WonderCSabo #3243 üzenetére
Köszönöm szépen mindenkinek, sikerült
-
WonderCSabo
félisten
válasz
trisztan94 #3241 üzenetére
Nem is értem miért kell ezt ennyire túlbonyolítani. Egyszerűen egy db int-ben tárolod elsőnek felforgatott gomb indexét. Ha gombok[lastIndex].Text == sender.Text, akkor mindkettőt fehérre állítod. Minden második kattintás után meg mondjuk a lastIndex-et -1 -re állíthatod, ezzel tudod magadnak jelezni, hogy még nem kattintottak először.
A magyar elnevezéseket, főleg az ékezetes
elnevezéseket nagyon messziről kerüld el.
Bazzeg nem igaz, hogy Jester leírta már ugyanezt előttem.
-
Jester01
veterán
válasz
trisztan94 #3241 üzenetére
Nagyon egyszerű, vezess be egy member változót ami a legutoljára felfordított indexet tárolja, illetve azt is, hogy érvényes-e. Legyen mondjuk -1 ha nincs ilyen (vagyis "első gomb" következik). Induláskor ezt akkor -1. A gomb kattintás eseménykezelőjében akkor megnézed, hogy ez -1 vagy sem. Ha az, akkor ez most "első gomb", egyszerűen elteszed az aktuális indexet ebbe a változóba és kész. Ha nem -1, akkor benne van az előzőleg felfordított gomb indexe. Ez alapján már össze tudod hasonlítani, és nem egyezés esetén azt és az aktuális gombot is visszafordítod (és persze az enabled-et is visszaállítod). A segédváltozót pedig -1-re teszed, mivel a következő gomb megint "első gomb" lesz. Leírva bonyolultabb mint leprogramozni
-
trisztan94
őstag
Hát ezt én is így logikáztam ki, de a kódot nem tudom megírni
Edit:
Eddig erre jutottam:
void gombertek(object sender, EventArgs e)
{
(sender as Button).Text = (sender as Button).Tag.ToString();
(sender as Button).Enabled = false;
(sender as Button).BackColor = Color.White;
for (int i = 0; i < 2;i++ )
{
felforgatott[i] = int.Parse((sender as Button).Text);
if (felforgatott[i] != int.Parse((sender as Button).Text))
{
(sender as Button).BackColor = Color.Black;
}
else
{
(sender as Button).BackColor = Color.White;
}
}
} -
fatal`
titán
válasz
trisztan94 #3239 üzenetére
Én ezt úgy csináltam, hogy egy tömbbe beraktam a felforgatott gomb indexét (esetedben akár magát a számot is rakhatod) és a második gombnál ezt hasonlítottam össze. Ha nem egyeznek akkor visszaállítod őket feketére, ha egyeznek úgy hagyod.
-
trisztan94
őstag
Sziasztok!
1-2 hónapja tanulgatom a C#-ot, jelenleg egy memóriajátékot akarok írni, de valamit nem tudok, és sehogy sem tudok rájönni. A program lényege, (gondolom mindenki tudja, hogy mi egy memóriajáték, de azért leírom) hogy van egy 4x4-es panelem feltöltve gombokkal, amik feketék alaphelyzetben. Rákattintasz, fehér lesz és kidob egy számot. Eddig minden klafa, tök jól működik, viszont elakadtam ott, hogy leellenőrizze a program, hogy ha a második kattintással felhozott gomb értéke nem egyezik az előzővel, akkor állítsa vissza feketére, ha egyezik, akkor meg maradjon úgy. Több órája ezzel sz@rakodok, sehogy sem tudok rájönni.
Itt a kód:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Memória
{
public partial class Form1 : Form
{
int lepesek = 0;
int talalatok = 0;
Button[] gombok = new Button[16];
Random r = new Random();
int elsogomb;
public Form1()
{
InitializeComponent();
}
private void but_new_Click(object sender, EventArgs e)
{
for (int i = 0; i < 16; i++)
{
gombok[i] = new Button();
gombok[i].Parent = panel;
gombok[i].Width = panel.Width / 4;
gombok[i].Height = panel.Height / 4;
gombok[i].Left = (i % 4) * (panel.Width / 4);
gombok[i].Top = (i / 4) * (panel.Height / 4);
gombok[i].BackColor = Color.Black;
gombok[i].Click += gombertek;
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 2; j++)
{
bool lerakva = false;
while(!lerakva)
{
int mivanmi = r.Next(0,16);
if (gombok[mivanmi].Tag==null)
{
lerakva = true;
gombok[mivanmi].Tag = i+1;
}
}
}
}
}
void gombertek(object sender, EventArgs e)
{
(sender as Button).Text = (sender as Button).Tag.ToString();
(sender as Button).Enabled = false;
(sender as Button).BackColor = Color.White;
elsogomb = int.Parse((sender as Button).Text);
}
void ugyanaz(object sender, EventArgs e)
{
}
private void but_exit_Click(object sender, EventArgs e)
{
this.Close();
}
}
}Köszönöm előre is
-
shaggy
aktív tag
Sziasztok!
Nekem az lenne a kérdésem hogy lehetne a már létező progit ami access adatbázisban titkositottan tárolja az adatokat átírni hogy XML-be tárolja?
Kezdő vagyok még nagyon nehéz megszokni nekem ezt a c#-ot.
Előre is köszönöm a segítséget.
-
fabal_
csendes tag
Sikerült megoldani. A gond ott volt h mikor listába fűztem fel a képeket s törlésnél a törölni kívánt képek nélkül újra totlama listát. A törölni akarrt elemek benn maradtak a memóriában.(80-100 db kép esetén (2-4 megás) nem tudom hogy de 1,5 GB memóriát megettek, ne kérdzzétek hogyan.) Mikor beviszem a rendszerbe a képeket egy thumbnail méretű kis képet hozok létre ami kb pár KB így nics nam memória használat. Mikor törlöm a képet akkor adatb-ból a hivatkozást s a meghajtóról peedig az ereeti angy képet törlöm a thumbnail megmarad. Mikor legközelebb megnyitom ezt a formotellenőrzöm a File.Exist() témát s ha nincs meg a fájl akkor törlöm a thumbnail-t is.
Mikor készítem a thu,mbnail képeket erősen ráhívom a GC-t így GC.Collect(GC.GetGeneration(this), GCCollectionMode.Forced);
//GCCollectionMode.Forced;
GC.WaitForPendingFinalizers();
A dispose-os témát nézegettem. De simán csak ráhívtam. Override-ot nem csináltam mivel annyira nem vágom a működését jelenleg. -
Chipi333
csendes tag
Ahogy látom, ha ömlesztve van egy csomó adatom (mondjuk milliós nagyságrendben néztem) és nem érdekel a rendezhetőség, csak ki-be akarok olvasni és gyorsan elérni, akkor jó és tényleg gyors, de egyébként IList, ha rendezett kell és ha úgyis iterálni kell.
Most C# konkrétumot nem tudok mondai, de ha rendezettség és gyors random elérés is kell, arra vannak olyan adatszerkezetek amik egy rendezett struktúrában tárolják az adatokat (pl vmilyen fa), és emellett tartanak egy hash táblát is hozzá. Javában biztosan van ilyen, és hát gondolom a .net frameworkből sem maradt ki
-
amargo
addikt
válasz
WonderCSabo #3233 üzenetére
"Vagy erre értetted az index karbantartását?"
Igen. Jobban oda kell figyelni a használatára. -
WonderCSabo
félisten
Nyilván valamit valamiért alapon megy ez is, mivel karban kell tartani a index-et.
Nem, nem kell karbantartani semmiféle indexet. Az elem címe lekéréskor, hozzáadáskor, törléskor is a kulcs alapján a hash fv-el képződik le, ez O(1) - es művelet. Itt hozzáadáskor lehet csak egy kis probléma: ha kezd betelni a hashtábla, akkor nagyobbat kell lefoglalni, és átmásolni az elemeket. Ha pedig a hash fv már meglévő elem indexét képezi, akkor ezt az ütközést fel kell oldani. A HashTable ezt újrahasheléssel oldja meg, a Dictionary pedig láncolással. Vagy erre értetted az index karbantartását?
-
amargo
addikt
"Viszont a hashtáblák előnyét nem látom."
"És erre írtam, hogy ha nem kell milliónyi különböző érték, nem fáj."
Nem csak millió, már kevesebbnél is bizonyít.A legegyszerűbb példa, hogy sokkal gyorsabb ez a belső szerkezetének köszönhető. Nyilván valamit valamiért alapon megy ez is, mivel karban kell tartani a index-et. Képzeld el úgy, mint egy adatbázis táblát, amire index-et raksz.
Egy példa:
Adott egy kritikus adatkiszolgáló szál - amint más szálak tartanak karban -, ha adat kell belőle, akkor azt gyorsan kell publikálni. Itt az IList rettentő csúnyán elvérez.Amint látom más példákat is felhoztak rá.
-
drkbl
őstag
Utánanézve, ajánlott a Dispose használata a nem menedzselt erőforrások felszabadításához: Image.Dispose Method
Cleaning Up Unmanaged Resources
Kérdés továbbá, hogy GetThumbnailImage új képet ad vissza, vagy hivatkozik az eredetire, mert amíg hivatkozik, nem szabadul fel a hivatkozás miatt.
-
drkbl
őstag
Nem igazi válasz, inkább csak ismereteim összefoglalása
Pontosan
A generikusok legnagyobb előnye a boxing/unboxing [1][2] elkerülése.
A hash, mint a linkelt cikk írja, arra jó, hogy komplex kulcsot rövidít. Pl. tárolni kell 1000 nagyságrendű embert, kulcs név+születés helye+születés ideje+anyja neve, akkor megfelelő, az adott tartományban ismétlődést nem adó hash függvénnyel memória spórolható, és/vagy a keresés nagyban gyorsítható. Pl. egy adatrögzítő View saját magán belül ellenőrizheti a véletlen ismétlődést.
A hash függvény viszont adhatja ugyanazt az eredményt különböző kulcsokra, ezért kezelni kell a hash ütközést (amúgy nem túl régen kénytelenek voltak kiadni egy biztonsági frissítést az ütközéskezelés időigénye DoS lehetőség miatt a keretrendszerhez). A HashTable és a Dictionary más-más módszert használ erre, ez is lehet szempont a választáshoz.
-
fabal_
csendes tag
Sziasztok!
A következő problémám lenne. A main formból nyitok egy formot szálkezeléssel(ThreadPool-al). Itt megtudok adni fhszn-i adatokat és képeket feltölteni(new thread-el stat módban). Ami ekkor egy központi helyre másolódik s elérési út egy mysql adatbázisba és megjelenik egy pictureboxxon. A Gondom az hogy a képeket amiket betöltöttem(background worker-el) elkezdem törölni. Vagyis törlöm mysql-böl a List<Image>-et újra beolvasom a tölendő elem nélkül. S ezután akarom törölni a file-t Ekkor elkezd sírni h egy másik szál jelenleg használja a törlendő képet.A neten találtam eme kódot erre a parára de nem használ. Itt a PICS[] a képek elérési útjának a tömbje lenne.
for (int i = 0; i < Pics.Length - 1; i++)
{
Image node = Image.FromFile(Pics[i]);
int[] points = Picturebox_Resize(91.0, 91.0, node.Width, node.Height);
var img = Image.FromFile(Pics[i]).GetThumbnailImage(points[0],points[1], null, new IntPtr());
node = img;
img = null;
}
Találkoztatok már efféle dologgal?Van valami ötletetek rá hogy lehetne megoldani?
Üdv fabal -
Köszi, azt tudom, mikor használjak generikusokat - nagyjából mindig az én esetemben
. tegnap kicsit benéztem, ezért próbálgattam is a HashSetet. Ahogy látom, ha ömlesztve van egy csomó adatom (mondjuk milliós nagyságrendben néztem) és nem érdekel a rendezhetőség, csak ki-be akarok olvasni és gyorsan elérni, akkor jó és tényleg gyors, de egyébként IList, ha rendezett kell és ha úgyis iterálni kell. Az, hogy a hash alapján gyorsabb keresni, nem is annyira lényeges, inkább az, hogyan kellenek az adatok.
-
drkbl
őstag
A másik oldalról megközelítve: When to Use Generic Collections
-
WonderCSabo
félisten
válasz
martonx #3223 üzenetére
Sztem a kérdés arra vonatkozott, hogy hogyan lehet generáltatni.
-
-
nyxor
aktív tag
Üdv!
Fősulin olyan beadandó feladatot kaptam, ami egy .cs forrásállományból készít html dokumentációt. Annyi a lényeg, hogy legyen egy táblázat, aminek felül 2, alul 1 cellája van. A bal felsőben sorakozzanak az osztályok nevei abc sorrendben linkként, a jobb felsőben a kiválasztott osztály adattagjai, metódusai, eseményei szintén linkként, a lenti cellában pedig a bal felsőben kiválasztott elem adatai jelenjenek meg, beleértve a hívó és a meghívott metódusokat. Mindezt egy szép UI-val megfejelve.
Odáig eljutottam, hogy kész a program kezelőfelülete, lehet fájlt nyitni, kimeneti állomány helyét tallózni. A bemeneti fájlt szépen be is olvassa (File.ReadAllLines-t használtam), aztán a sorokon végighaladva meghatározza a kapcsos zárójelek alapján a szintet a kódban, ami szerint eldönti, hogy osztályról vagy metódusról van-e szó. Ez eddig működőképes is, leteszteltem és gyönyörűen összegyűjt minden adatot. A kérdésem már csak az, hogyan lehetne hatékonyan eltárolni ezeket az adatokat, hogy ne keveredjenek össze a metódusok és a leírásaik (valahogy hozzárendelni)? Struktúra kéne neki? És hogy utána gond nélkül lehessen rájuk hivatkozni a html oldalakon belül. A legfontosabb pedig: hogy a francba írjak html-t C# kódból? xml-t tudok, de pont nem az kell. Külső kód pedig nem használható, csak saját és MS által írt kód.
Bocsi hogy ilyen hosszúra sikerült, a válaszokat előre is köszönöm -
válasz
WonderCSabo #3219 üzenetére
Ja, értem.
-
WonderCSabo
félisten
Elírtam, úgy értettem, hogy a HashSet is az, a HashTable osztály valóban nem az. A többinél pedig direkt magyarul kisbetűvel írtam, mert általánosságban beszéltem a hashtáblálról, nem a HashTable osztályról.
Mellesleg természetesen a HashTable annyival tud többet a HashSetnél, hogy az előbbi kulcs-érték párokat tárol, az utóbbi csak kulcsokat. De HashTable helyett akkor inkább Dictionary.
-
válasz
WonderCSabo #3216 üzenetére
Ez a HashSet generikus, de a hashtábla (HashTable) más.
"Meg amúgy is ezek a kis programok csak példák, a való életben nem 10 elemű listákkal fog csak foglalkozni a tanuló."
A példa jó is volt, én nem olvastam át elég jól elsőre.
Egyébként nyilván könnyebb hash alapján elérni valamit (int) ebben igazad van.
-
Szabesz
őstag
válasz
WonderCSabo #3214 üzenetére
Tisztában vagyok vele. Csak a miértekre próbáltam rámutatni.
-
WonderCSabo
félisten
A hashtábla is generikus.
Már leírtam az előnyeit. Konstans idejű hozzáadás (majdnem mindig), eltávolítás és lekérés, asszem ezek önmagukban bőven elegendő érvek.
Szerk.: A második részre: a kód is sokkal tisztább vele, plusz miért ne oldhatnánk meg elegánsabban a dolgot, ha már van mód rá. Én csak beposztoltam a kódot, hogy ezt megmutassam. Meg amúgy is ezek a kis programok csak példák, a való életben nem 10 elemű listákkal fog csak foglalkozni a tanuló.
(#3217) Szabesz: Okés.
-
válasz
WonderCSabo #3214 üzenetére
Igen, már látom, mit néztem be.
Viszont a hashtáblák előnyét nem látom. Kb. egyszer találkoztam olyan rendszerrel, ahol ilyenekkel kellett játszani és kínszenvedés volt (.net 2-es kód). Tudsz példákat mondani a generikusok ellenében?
"Ez az amit a hashtábla konstans idő alatt tesz meg a hozzáadással, Te pedig minden egyes új szám hozzáadásánál lineáris keresést végeznél..."
És erre írtam, hogy ha nem kell milliónyi különböző érték, nem fáj.
Ez a HashSet<T> már egy viszonylag használható dolognak tűnik az eddigi megoldásokhoz képest. Lehet, hogy majd ki is próbálom jobban.
-
WonderCSabo
félisten
Te most vmit nagyon elnézel... És még idézted is azt, hogy
A set is a collection that contains no duplicate elements
Tehát: nem lehetnek benne duplikált kulcsok. Pont ezt használtam ki ennél a kis kódnál. A hashtábláknak pedig óriási előnyei vannak más adatszerkezetekkel szemben, egy kis ízelítőért lásd előző hszemet...
Szerk.: Ja látom már kiderült a dolog.
Szabesz: Az if is feleslegs, az csak azért van ott, hogy dupkilálás esetén várjon picit a progi, de teljesen felesleges várni.
stevve: de akkor már inkább vizsgálnám, hogy van-e már ilyen a kollekcióban
Ez az amit a hashtábla konstans idő alatt tesz meg a hozzáadással, Te pedig minden egyes új szám hozzáadásánál lineáris keresést végeznél...
-
válasz
WonderCSabo #3210 üzenetére
Közben rátaláltam az MSDN-en:
"A set is a collection that contains no duplicate elements, and whose elements are in no particular order."
Vagyis valahogy még azt is ki kell ötölni, hogyan kerüljük el a duplikálást, különben hibát kapsz. Nem használtam még HashSet-et csak egyszer kipróbáltam, de nem látom az előnyét sajnos. Veszek inkább egy generikus listát és abban is bármit meg tudok oldani.
Ja, most látom, hogy a duplikálás kikerülésére trükköztetek pár hsz-en keresztül.
sosem használok randomot, erzért ez nem is foglalkoztat, de akkor már inkább vizsgálnám, hogy van-e már ilyen a kollekcióban. Ha nem kell millió rekordot disctinct módon randomolni, akkor nem lesz a teljesítmény se gond
-
válasz
WonderCSabo #3202 üzenetére
A HashSet-ben nem lehet duplikált elem, ha jól tudom, ez viszont ezt nem garantálja.
Én inkább egy sima generikus listában tárolnék.
-
WonderCSabo
félisten
válasz
Jester01 #3207 üzenetére
Ez természetesen így van, de 10 db (vagy sokkal több) szám esetén 1-hez nagyon közeli valószínűséggel nagyon rövid idő alatt fut le. Én tesztelgettem ezt, és még sosem sikerült elhúzni az időt ezzel. Persze ha biztosra akarsz menni, akkor csinálsz egy láncolt listát 1-n-ig, megkevered őket, aztán random indexeket választasz és a választottad kiszeded a listából, csinálod ezt amíg üres nem lesz a lista.
-
Jester01
veterán
Mellesleg általában tilos ilyen módon generálni a véletlenszámokat mivel nem determinisztikus hány random hívás lesz. A helyes megoldás mindig csak a maradék számok közül választani, hiszen valójában is ez történik.
-
WonderCSabo
félisten
válasz
Jhonny06 #3205 üzenetére
Nem, egyáltalán nem. Az STL vector egy sima tömb, csak van rá húzva egy pár fv, növeli a méretét, hogy ha kell, stb. A HashSet pedig egy hashtáblán alapuló adatszerkezet. És amiért jó nekünk ide a hashtábla:
- nem lehet duplikált kulcsokat belerakni
- a berakás (az esetek nagy részében), és a többi alapművelet mindig (persze ezek most nem is kellenek) konstans komplexitásúTermészetesen az STL vectorra egyik sem igaz (kivéve a berakást), hisz az csak egy tömb. Ami miatt viszont gondot okozhat a hashtábla, az az, hogy az elemek semmilyen sorrendiséget nem fognak megtartani (tehát se a kulcsok rendezése alapján, se a berakás szerint), de jelenleg ez sem probléma.
-
Jhonny06
veterán
válasz
WonderCSabo #3204 üzenetére
Ez a HashSet kvázi a C++-os vector ekvivalense?
-
Jhonny06
veterán
válasz
WonderCSabo #3202 üzenetére
Ilyeneket nem tudok, sorry.
-
Jhonny06
veterán
válasz
atti1848 #3200 üzenetére
Dobhat, mert gyakorlatilag az idő függvényében generálódnak a számok, így minél kisebb az értéktartomány, annál valószínűbb, hogy lesz több ugyanolyan elem is. Ha késleltetés nélkül fut, akkor meg pláne, hiszen nincs idő nagyobb tartományban generálni, ezért érdemes.
Viszont a késleltetés megtétele után még mindig ott van a Te megoldásod, miszerint ellenőrizheted, hogy nincs-e két ugyanolyan érték a tömbben, egy egymásba ágyazott for ciklussal. Azért ajánlottam előbb a késleltetést, mert ha kicsi az értéktartomány és kvázi majdnem mindig hasonló értéket generál a kód, akkor szépen "végtelen" (persze nem teljesen) ciklus jön létre, mert ugye kap a tömb egy számot és összehasonlítja az következővel, ami ugyanaz, meg újra ugyanaz, stb. és csak akkor csinál valamit, ha a két szám nem egyezik meg, tehát ezzel nem árt vigyázni.
Szóval az a legjobb megoldás, ha először ellenőrzöd, hogy nincs-e benne már, majd generálsz és késleltetsz.
for (int i = 0; i < szamok.Length; i++)
{
for(int j = 0; j < szamok.Length; j++)
{
if(szamok[i] != szamok[j])
{
szamok[i] = rnd.Next(1, 90);
Thread.Sleep(100);
}
}
}
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- OFF TOPIC 44 - Te mondd, hogy offtopic, a te hangod mélyebb!
- BestBuy ruhás topik
- Redmi Note 13 Pro 5G - nem százas, kétszázas!
- Okos Otthon / Smart Home
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Nintendo Switch 2
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- sziku69: Szólánc.
- További aktív témák...
- BESZÁMÍTÁS! GIGABYTE AORUS MASTER RTX 3070 8GB GDDR6 videokártya garanciával hibátlan működéssel
- BESZÁMÍTÁS! ASRock B250 i5 6600 16GB DDR4 256 SSD 500GB HDD GTX 1050 2GB Zalman Z1 Njoy 550W
- Bomba ár! HP ProBook 430 G3 - i5-6GEN I 8GB I 256SSD I HDMI I 13,3" HD I Cam I W10 I Garancia!
- Országosan a legjobb BANKMENTES részletfizetési konstrukció! Dell G15 5530
- 124 - Lenovo Yoga Pro 7 (14IMH9) - Intel Core Ultra 9 185H, RTX 4060 (48 hónap garancia!) (ELKELT)
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged