- Fotók, videók mobillal
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Szívós, szép és kitartó az új OnePlus óra
- Ingyen beszerezhető pár SEGA klasszikus mielőtt lekerülnek a Play Áruházból
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Honor Magic5 Pro - kamerák bűvöletében
- Magisk
- Szerkesztett és makrofotók mobillal
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy S25 - végre van kicsi!
Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz
DrojDtroll #9512 üzenetére
persze - az az adott osztályra cast-ol, vagy null-t ad - gyakorlatilag az alábbinek megfelelő synthetic sugar:
// object o = valami();
// T t = o as T;
T t = o is T ? (T)o : null; -
Alexios
veterán
válasz
DrojDtroll #9488 üzenetére
Unit/egyéb tesztek ahogy korábban is írták, ajánlott olvasmány: [link]
-
válasz
DrojDtroll #9488 üzenetére
Igen, úgy hívják a tool-t hogy unit teszt.
Tehát a refaktorálás előtt megírod a unit teszteket ha nincsenek, majd refaktorálsz és ellenőrzöd hogy továbbra is jók-e a tesztek.
-
disy68
aktív tag
válasz
DrojDtroll #9488 üzenetére
komponens tesztek, integrációs tesztek, end-to-end tesztek és opcionális manuál tesztelés a scope-tól függően
-
Atomantiii
addikt
válasz
DrojDtroll #9479 üzenetére
Akkor nekifutok még egyszer. Van egy windows forms app-om (.net frameworkos)
Szeretnék egy menühöz elemeket hozzáadni, pl most 2021-ben jelenjen meg az adott menüben 2021. Jövőre jelenjen meg ugyanabban a menüpontban 2021 helyett 2022.
Tehát a 0 helyett idén 2021 jelenleg meg, jövőre meg 2022, attól függ melyik évben vagyunk.Ekkor a form1.designer.cs-ben ez jelenik meg:
this.toolStripMenuItem3.Text = "0";
Ha ide beírom, az alábbi sort, akkor megjelenik a 0 helyett 2021 a menüben.
this.toolStripMenuItem3.Text = System.DateTime.Today.AddYears(0).ToString("yyyy");Ha a form1.designer.cs-ről átváltok form1.cs[design]-ra és ott mondjuk adok még hozzá menüket és utána visszaváltok form1.designer.cs-re, hogy az újaknak is megadjam a System.DateTime.Today.AddYears dolgait akkor azt látom, hogy a korábban beírt this.toolStripMenuItem3.Text = System.DateTime.Today.AddYears(0).ToString("yyyy"); helyett visszaírja ezt: this.toolStripMenuItem3.Text = "2021";
Vagy ez van olyan okos, hogy jövőre ide 2022-őt fog írni?
-
fatal`
titán
válasz
DrojDtroll #9398 üzenetére
FormatException vagy ConfigurationErrorsException (ezt inkább hiányzó config paraméternél tenném, ha nem lehet értelmes defaultot adni)
-
joysefke
veterán
válasz
DrojDtroll #9398 üzenetére
FormatException? esetleg az alkalmazás definiálhatja a saját típusait...
-
joysefke
veterán
válasz
DrojDtroll #9337 üzenetére
public static int[,] Get4mIntArrBufferedSpan(string fileName)
{
var sw = new Stopwatch();
uint heigth = 2048;
uint width = heigth;
var result = new int[heigth, width];
var buffSize = sizeof(ushort) * heigth;
var buff = new byte[buffSize];
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None, bufferSize: 1024 * 1024))
{
sw.Start();
for (int w = 0; w < width; w++)
{
int chunk = 0;
while (chunk < buffSize)
chunk += fs.Read(buff, chunk, (int)buffSize - chunk);
var shortArr = MemoryMarshal.Cast<byte, ushort>(buff);
for (int h = 0; h < heigth; h++)
result[h, w] = shortArr[h];
}
sw.Stop();
Console.WriteLine($"{nameof(Get4mIntArrBufferedSpan)} took {sw.ElapsedMilliseconds}ms");
}
return result;
}
Nekem a fenti kód pontosan ugyanazt az eredmény tömböt dobja ki mint a te első metódusod. A különbség annyi, hogy a itt while ciklus megpróbál egyszerre 4096byteot (2048db ushort) kiolvasni a streamből, a kiolvasott byte tömböt castolja ushort-tömbre azzal pedig feltölti egy oszlopodat.
Szóval itt is rossz a tömb bejárási sorrendje, de a Stream.Read() metódus úgy tűnik, hogy ennyivel hatékonyabb, mint egyenként ushortokat olvasgatni. (nálam pontosan duplázódott a sebesség)
A fenti kódban ha a mátrix bejárási sorrendje "normalizálódna" akkor további 3x lenne gyorsabb. ==> tehát igen, itt a processzor fogja vissza a fájlműveletet
Ebben az esetben lenne értelme egyszerre 2048db elemnél többet is olvasni. Az még dobna rajta.
-
joysefke
veterán
válasz
DrojDtroll #9334 üzenetére
Igen, én is észrevettem, de szvsz nem a forrásadatokkal van a probléma, hanem a két metódusod nem ugyanazt a bytesorrendet használja, tehát a tömbök tartalma amelyeket visszaadnak sem ugyanaz lesz.
Amikor a második metódusban streamből beolvasol egy ulongot, akkor a ReadUInt64() figyelembe veszi az x86 bytesorrendjét: a változónak a kisebb helyiértékű byteja van alacsonyabb címen (little endian). Ha a streamed sorrendben ezeket a byteoket tartalmazza:
1, 0x01; 2, 0x02; 3; 0x03; 4, 0x04; 5; 0x05; 6, 0x06; 7, 0x07;8, 0x08;akkor a kiolvasott ulong értéke az 0x08'07'06'05'04'03'02'01 lesz, szemben azzal a sorrenddel amit a fileban látsz.
Ha ezt a részt fordított sorrendbe raknád, akkor pont ugyanazt a tömböt adná vissza a kettő metódusod.
result[++j, i] = (ushort)(r >> 48);
result[++j, i] = (ushort)(r >> 32);
result[++j, i] = (ushort)(r >> 16);
result[++j, i] = (ushort)r;
-
joysefke
veterán
válasz
DrojDtroll #9331 üzenetére
for (int i = 0; i < heigth; i++)
{
for (int j = 0; j < width; j++)
{
result[j, i] = reader.ReadUInt16();
}
}
Itt van még egy olyan probléma (mindkét példádban), hogy úgy iterálsz át egy nagy többdimenziós tömbön, hogy a belső ciklusod nem a tömb legjobboldalibb dimenzióján iterál.
C#-ban a többdimenziós tömbök (A[,,,]) row-major ként vannak a memóriában, tehát a legjobb oldalibb dimenzió egymás melletti elemei a memóriában egymás mellett lesznek. az A[100, 50] elem mellett az A[100,51] elem van. Ezzel szemben az A[101,50] az teljesen máshol van, a te esetedben (2048) elemmel később mint az A[100,50], tehát mivel int tömbről van szó, 8KB-tal később van. Az hogy itt csak írsz és nem olvasol kb mindegy, mert nyilván egy egész cache line lesz írva/olvasva.
A helyzeten cache-line szempontből még (valószínűleg) tovább ront itt, hogy kettő hatványonként iterálsz. ilyen problémák nagy mátrixok szorzásánál vannak
-
joysefke
veterán
válasz
DrojDtroll #9331 üzenetére
Nincs időm kipróbálni, de nekem egyáltalán nem szimpatikus egy ilyen nagy fájlnak a mini adagokban való szekvenciális olvasgatása.
1, Miért nem a sima stream Read metódussal olvasol azonnal byte[] tömbbe?
2, Én megpróbálnám a bufferméreteket manuálisan feljebb húzni. Alapból csak valami ici-pici bufferekkel dolgozik. (nekem pár 10KB rémlik)
3, Nem mintha itt számítania kellene de te itt ugye 4M elemen iterálsz át egy szoros for () ciklusban => ha nem fájlműveletet végeznél, akkor már ez is bizonyos helyzetekben indokolatlanul lassú (4M tömbhatár ellenőrzés az indexerekre+ ellenőrzés az iterátoron, szerk: mondjuk 4M az még nem túl sok..)
(4, miért int tömbben-ben tárolod a short értékeidet?)5, a két kód ránézésre nem ugyanazt csinálja. a második konkrétan elcseszettnek tűnik.
64bitenként olvasol és ugyanúgy 4M-szor mint amikor 16 bitenként olvastál???? -
Alexios
veterán
válasz
DrojDtroll #9226 üzenetére
Én fejlesztettem még rá régen, bár túl sok minden nem rémlik már belőle
-
DrojDtroll
veterán
válasz
DrojDtroll #9225 üzenetére
A HorizontalAlignment property nélkül tökéletes középen van.
MÁS:
Van itt olyan forumtárs aki annó fejlesztett windows 8-as vagy 8.1-es telefonra? -
dqdb
nagyúr
válasz
DrojDtroll #9219 üzenetére
Ne a rendszerben található, .NET Frameworkhöz tartozó dll-t add hozzá referenciaként, hanem ezt a NuGet csomagot.
-
martonx
veterán
válasz
DrojDtroll #8852 üzenetére
Használd a Watch window-t, ha csak konkrét értékre vagy kíváncsi.
-
válasz
DrojDtroll #8854 üzenetére
Ott konkrétan be tudod gépenlni és szépen egyesével legetteled az értékeket. Jobb ötletem hirtelen nincsen, vagy 5 éve nem használok már VS-t
-
válasz
DrojDtroll #8852 üzenetére
Csak az értékére lennél kíváncsi? Immediate window?
-
válasz
DrojDtroll #8807 üzenetére
-
Chesterfield
őstag
válasz
DrojDtroll #8805 üzenetére
-
martonx
veterán
válasz
DrojDtroll #8805 üzenetére
Nyilván nem, de kismillió dokumentáció, tutorial van hozzá, nagyobb szégyen hülyeséget kérdezni, mint szó nélkül utána olvasni.
-
válasz
DrojDtroll #8703 üzenetére
Git
-
cattus
addikt
válasz
DrojDtroll #8703 üzenetére
Git
-
petyus_
senior tag
válasz
DrojDtroll #8543 üzenetére
Debug módban futtatod, ezért hiába kezeled le, a vs akkor is megáll, hogy megmutassa az exceptiont. Indítsd ctrl+F5-tel, akkor nem fog megállni. Illetve be lehet állítani, hogy a kezelt exceptionöknél ne álljon meg, de most nincs előttem, úgyhogy nem tudom megmondani hol
.
-
martonx
veterán
válasz
DrojDtroll #8519 üzenetére
Ezek egyike se indokolja a külön class-t
-
martonx
veterán
válasz
DrojDtroll #8517 üzenetére
A két képet miért külön osztály kezeli?
-
Peter Kiss
őstag
válasz
DrojDtroll #8513 üzenetére
Kíváncsi lennék erre a felépítésre, mert valami biztosan nem kerek.
Írhatsz extension methodokat, hogy kényelmesebb legyen használni bizonyos interface-ekre, amennyiben valóban utility jellegű ez a static valami most.
-
Szabesz
őstag
válasz
DrojDtroll #8513 üzenetére
Ez esetben adja magát a Singleton.
-
Alexios
veterán
válasz
DrojDtroll #8513 üzenetére
Na de ha ez egy típushoz tartozó, statikus dolog, akkor miért akarnád eleve interface-be rakni, hogy más is megvalósítsa - azt ami egy kifejezetten X típushoz tartozik?
Szerintem, mikor ilyen igények lépnek fel, ott valószínűleg eleve érdekes a kód is már. -
Peter Kiss
őstag
válasz
DrojDtroll #8509 üzenetére
Miért kell neked static?
-
Alexios
veterán
válasz
DrojDtroll #8509 üzenetére
absztrakt osztály esetleg, itt az ososztaly tartalmazhat statikus metodusokat, de ezeket nem fogod tudni felulirni egy származtatott osztályban, mivel a statikus metódus nem példány hanem típushoz van kötve- azaz c#-ban nincs olyan hogy abstract static vagy virtual static
-
válasz
DrojDtroll #8509 üzenetére
Statikus metódusokat nem lehet örököltetni vagy felülírni, így nem lehet abstract sem. A statikus metódus a típuson van definiálva és nem az osztály egy példányán.
-
bazsy1981
tag
válasz
DrojDtroll #8498 üzenetére
Nem, az openfiledialogRÓL húzunk át egy file-t, egy 3d tervező programba. És ennek a filenak az elérési útvonala kellene nekem egy változóba. Ha kijelöli és rányom a megnyitás gombra akkor ez meg is történik.
Itt ezt a fölösleges kattintást akarnánk megspórolni, hogy valahogy a Drag&Drop esemény hatására történjen a dolog, ne csak a megnyitás gomb hatására. -
sztanozs
veterán
válasz
DrojDtroll #8490 üzenetére
Lehet érdemes lenne berakni egy 2048x2048 image-be mint 16-bites bitmap-et és ráereszteni valami veszteségmentes képtömörítést. Lehet, hogy jobban tömörítene, mint egy zip.
-
vlevi
nagyúr
válasz
DrojDtroll #8486 üzenetére
"Egy mérési fájl így 8MB"
Gzip
Persze lehet, hogy nem lesz sokkal kisebb, és az is lehet, hogy a nagyságrendeken nem változtat, de láttam már olyat, hogy volt, amit a zip, rar, vagy egyéb, veszteségmentes tömörítések a tizedére, vagy még kisebbre össze tudták rántani. -
válasz
DrojDtroll #8486 üzenetére
És ha db-ben lenne tárolva?
-
amargo
addikt
válasz
DrojDtroll #8483 üzenetére
Hova akarsz fájlokat feltölteni ez nekem nem tiszta és mik ezek a munkafájlok, ha tudsz róla valami közérdekűt írni? Mert a forrás fájloknak is megvan a maguk hely és a nagyobb méretű Artifact-oknak is, én magát a munkafájlokat inkább az utóbbiba tudnám sorolni, ezért evvel kellene inkább megismerkedni szerintem.
Amúgy 10GB a limit (Git esetén) és itt is Artifact-ot ajánlanak, többek között.
-
martonx
veterán
válasz
DrojDtroll #8483 üzenetére
Tudtommal nincs méretkorlát, viszont ezek nem tudom milyen fileok, de sose jó gyakorlat DB backupoktól kezdve minden szart a kód repositorykban tartani.
-
amargo
addikt
válasz
DrojDtroll #8481 üzenetére
Használok, a kezdetektől. Szerintem elfér itt.
-
sztanozs
veterán
válasz
DrojDtroll #8461 üzenetére
Ha .NET-ben programozható, akkor PowerShell-el simán meg tudod eztr csinálni.
-
sztanozs
veterán
válasz
DrojDtroll #8443 üzenetére
Milyen eszköz ez? Nincs már rá valami shell, biztos neked kell megírni?
Ha korlátozott tudású a cucc (pl minimális memória), akkor nem biztos, hogy egyáltalán megéri rá parancsértelmezőt írni. -
martonx
veterán
válasz
DrojDtroll #8441 üzenetére
Tényleg van értelme feltalálnod a spanyol viaszt?
-
Peter Kiss
őstag
válasz
DrojDtroll #8435 üzenetére
https://stackoverflow.com/questions/878937/unit-testing-float-operations-in-visual-studio-2008-pro
Legtöbb lib-nek van hasonlója:
Assert.AreEqual(float expected, float actual, float tolerance);
-
cattus
addikt
válasz
DrojDtroll #8312 üzenetére
Tippre azért, mert a Hover esemény csak akkor sül el, amikor a kurzor az adott elemen kívülről az adott elemen belülre kerül (ráhúzod), nem pedig azt, hogy az adott elemre kattintott-e az egérgombbal. Felteszem az a szándékod, hogy a pictureBox-on történő egérkattintást kezeld. Ez esetben, ha van neki _Clicked függvénye akkor azt implementáld, vagy ha nincs, akkor tedd bele egy olyan konténerbe, aminek van. Vagy feliratkozhatsz az egér eseményére is és nézheted, hogy éppen az adott elemen belül van-e, de ez talán a leginkább kerülendő megoldás.
-
martonx
veterán
válasz
DrojDtroll #8312 üzenetére
Lehet, hogy paraszt vagyok, de ha megdebuggolod, akkor biztosan látni fogod, hogy mi történik.
-
lord.lakli
őstag
válasz
DrojDtroll #8309 üzenetére
Miért nem dobod el az egész "képet"?
-
vlevi
nagyúr
válasz
DrojDtroll #8307 üzenetére
Nem ástam bele magam C#-ban a kép kezelésbe, de egy tippem lenne, használj egy másik, átlátszó képet az eredeti fölött. Kábé, mint egy új layert. Ezen rajzold a vonalat, és csak ezt a képet frissítsd. Amikor a felhasználó befejezi a rajzolást, elég akkor rátenni véglegesen az eredeti képre a vonalat.
u.i.: Elindítottam a VS-t, és úgy látom, a pictureboxnak van Image, és BackgroundImage propertyje. Szerintem érdemes kipróbálni, hogy a "rendes" képed a backgroundimage-ben van, és a rajzolást az image-ben csinálod, és amikor készen van, akkor bemásolod az image-be.
Vagy, nem is kell bemásolni, mert, csak egy vonalat kell rá húzni. -
BTminishop
aktív tag
válasz
DrojDtroll #8305 üzenetére
Akkor mi is a probléma?
-
BTminishop
aktív tag
válasz
DrojDtroll #8303 üzenetére
Az én ötletem az lenne, hogy a kezdőpont meghatározása után az egér pozícióját lekérdezni és azokat a pontokat befesteni a megfelelő színre, ezzel ugye csak az a gond, hogy globális koordinátákról van szó - tehát az egész ablakról nem konkrétan a négyzetről de ezt valahogy csak meglehet oldani.
-
Peter Kiss
őstag
válasz
DrojDtroll #8293 üzenetére
Mit is szeretnél megoldani?
-
DrojDtroll
veterán
válasz
DrojDtroll #8292 üzenetére
Ezt a problémát megoldottam úgy hogy csináltam egy osztály ami egyetlen color field-et tartalmaz.
Most a serializációval küszködök.
A Class amit el kellene menteni.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
namespace raw_data
{
[Serializable]
public class ColorPalette : Data.ISeriazable
{
private List<Imaging.RefColor> _colorList;
public string SerializedName { get; set; }
public ColorPalette()
{
ColorList = new List<Imaging.RefColor>();
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMin));
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMax));
SerializedName = Settings.Folder.Default.ColorPalette + Path.AltDirectorySeparatorChar + System.IO.Directory.GetFiles(Settings.Folder.Default.ColorPalette).Length;
}
public List<Imaging.RefColor> ColorList { get => _colorList; set => _colorList = value; }
public Lut lut { get; set; }
public string GetSerializedName()
{
return SerializedName;
}
}
}A serializálást végző függvény:
public static void SerializeObject(Data.ISeriazable obj)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(obj.GetSerializedName(),
FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
}A visszatöltés metódusa
internal static void LoadSerializedPalettes(GroupBox colorPaletteGroupBox)
{
string[] serializedfilenames=Directory.GetFiles(Settings.Folder.Default.ColorPalette);
foreach (var item in serializedfilenames)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(item,
FileMode.Open,
FileAccess.Read,
FileShare.Read);
ColorPalette cp = (ColorPalette)formatter.Deserialize(stream);
stream.Close();
ColorPaletteSettings.ColorPaletteList.Add(cp);
AddNewPalatte(colorPaletteGroupBox, cp);
}
}Nem töltődnek rendesen vissza az objektumok. A stream még rendesen megvan. Debugban látom, hogy a hossza olyan mint amilyennek lennie kell.
Mitől lehet, hogy mégis null-t kapok?
-
martonx
veterán
válasz
DrojDtroll #8283 üzenetére
Simán jó lehet.
Ú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!
- Assetto Corsa
- Milyen légkondit a lakásba?
- ThinkPad (NEM IdeaPad)
- Autós topik látogatók beszélgetős, offolós topikja
- Világ Ninjái és Kódfejtői, egyesüljetek!
- The Division 2 (PC, XO, PS4)
- Elektromos cigaretta 🔞
- alza vélemények - tapasztalatok
- Kerékpárosok, bringások ide!
- Belemásznak a reddites beszélgetésekbe az AI-alapú hirdetések
- További aktív témák...
- IPhone 16 Plus 128GB One függő 2025.12.17. Apple jótállás
- IPhone 12 64GB gyári független szép új akku!!
- IPhone 12 128GB gyári független gyári 99%-os akku
- Asus A15 FA506IU 15.6" FHD IPS Ryzen 7 4800H GTX 1660Ti 16GB 512GB magyar vbill gar
- i5-13600KF, RX 9070, DDR5 32GB, 1 TB M.2, Fractal North TG és sok garancia
- Azonnali készpénzes INTEL CPU NVIDIA VGA számítógép felvásárlás személyesen / postával korrekt áron
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! MSI B450M R5 3600 16GB DDR4 512GB SSD RTX 2060 Super 8GB THERMALTAKE Core V21 500W
- LG 32GS95UE - 32" OLED / UHD 4K / 240Hz - 480Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- BESZÁMÍTÁS! MSI B460M i5 10400F 16GB DDR4 512GB SSD RX 6650XT 8GB Cooler Master MB600L Chieftec 600W
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest