Diskuze: Zoraďovanie podľa dátumu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
jde o to, že mu musíš říct, že řadíš datum
řazení podle
sloupce
mimochodem, já vždy používám ListView virtuálně, řazení a plnění je hodně rychlejší
pokud chceš něco jiného, hoď sem tvůj kód
Tak ja som zoraďovanie nemal žiadno pomocou kódu iba v nastaveniach toho ListView ( Sorting = Descending ) a pekne to fungovalo a zrazu október a aj teraz november to nejde :/ A načítavanie informácii mám takéto.
private void NacitanieInformacii()
{
string pathString2 = System.IO.Path.Combine(@"c:\Financnydennik\" + Convert.ToString(aktualrok), aktualmesiac, "Dennik.txt");
string pozicia = Path.Combine(@"c:\Financnydennik\" + Convert.ToString(aktualrok), aktualmesiac, "Dokopy.txt");
string[] lines2 = File.ReadAllLines(pozicia);
if (lines2[0] != null) PrijemSpolu.Text = Convert.ToString(lines2[0]) + " €";
prijmy = Convert.ToInt32(lines2[0]);
if (lines2[1] != null) VydavkySpolu.Text = Convert.ToString(lines2[1]) + " €";
vydavky = Convert.ToInt32(lines2[1]);
aktualny2 = Convert.ToInt32(lines2[0]) - Convert.ToInt32(lines2[1]);
aktualny.Text = Convert.ToString(aktualny2) + " €";
string[] lines = File.ReadAllLines(pathString2);
int pocOP = lines.Length / 6;
for (int i = 0; i < pocOP; i++)
{
string datum = lines[por]; por++;
string kategor = lines[por]; por++;
string podkat = lines[por]; por++;
string summa = lines[por]; por++;
string dovodo = lines[por]; por++;
int farba = Convert.ToInt32(lines[por]); por++;
ListViewItem lv = new ListViewItem(datum);
lv.SubItems.Add(kategor);
lv.SubItems.Add(podkat);
lv.SubItems.Add(summa + " €");
lv.SubItems.Add(dovodo);
if (farba == 1) lv.BackColor = Color.Green;
else if (farba == 2) lv.BackColor = Color.Red;
listView1.Items.Add(lv);
}
jún, júl, august, september mám krásne zoradený a október a november nie.
using System.Collections;
....
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.ListViewItemSorter = new ListViewItemComparer();
}
}
class ListViewItemComparer : IComparer
{
public int Compare(object t1, object t2)
{
int result = 0;
try
{
string s1 = ((ListViewItem)t1).SubItems[0].Text;
string s2 = ((ListViewItem)t2).SubItems[0].Text;
DateTime d1 = DateTime.Parse(s1);
DateTime d2 = DateTime.Parse(s2);
result = d1.CompareTo(d2);
}
catch (Exception) { }
return result;
}
}
Jsem snad jediny kdo place, kdyz vidi ty absolutni cesty v tom sourcu ?
Zde se nabizi otazka prpo zvidave..
Jaky je rozdil mezi timto kodem:
string datum = lines[por]; por++;
string kategor = lines[por]; por++;
string podkat = lines[por]; por++;
string summa = lines[por]; por++;
string dovodo = lines[por]; por++;
a tímto kodem:
string datum = lines[por];
string kategor = lines[por+1];
string podkat = lines[por+2];
string summa = lines[por+3];
string dovodo = lines[por+4];
por = por + 5;
na modernim CPU. kdo bude vedet, ma bludistaka
Ten druhý mnohem lépe využije CPU pipeline? Nevím, spíš tipuju, ale chci to vědět
A chces cerveneho, nebo zeleneho? Spravne.. zmenseni dependency chain a vetsinou se pouziva pri loop unrollingu
Nemáš nějakou dobrou e-book, kde si můžu přečíst o této compiler optimalizaci a podobném?
Jsou jich desitky, ale ke vsem me privedla vysoká škola a předměty jako Efektivni implementace algoritmu, číslicový návrh , HW architektura a další
Pokud ti jde o to rozumět dobře C# tak určitě:
atd
Můžeš blíže specifikovat pojem "moderní CPU" ?
jinak ještě na úrovni asembleru nevidím mezi variantami nějaký zásadní rozdíl
první varianta:
string kategor = lines[por+1];
09F826B7 mov eax,dword ptr [ebp-3Ch]
09F826BA mov edx,dword ptr [eax+214h]
09F826C0 inc edx
09F826C1 mov eax,dword ptr [ebp-3Ch]
09F826C4 mov ecx,dword ptr [eax+1DCh]
09F826CA cmp dword ptr [ecx],ecx
09F826CC call 5977DF00
09F826D1 mov dword ptr [ebp-88h],eax
09F826D7 mov eax,dword ptr [ebp-88h]
09F826DD mov dword ptr [ebp-60h],eax
druhá varianta:
string kategor = lines[por];
0A212AB0 mov eax,dword ptr [ebp-3Ch]
0A212AB3 mov ecx,dword ptr [eax+1DCh]
0A212AB9 mov eax,dword ptr [ebp-3Ch]
0A212ABC mov edx,dword ptr [eax+214h]
0A212AC2 cmp dword ptr [ecx],ecx
0A212AC4 call 5977DF00
0A212AC9 mov dword ptr [ebp-88h],eax
0A212ACF mov eax,dword ptr [ebp-88h]
0A212AD5 mov dword ptr [ebp-60h],eax
por++;
0A212AD8 mov eax,dword ptr [ebp-3Ch]
0A212ADB inc dword ptr [eax+214h]
protoze to si prekladac neridi.
Jeste jednou s "oznacenim".
take to samozrejme zalezi na target CPU.
Krasna ukazka techto figlu a jeho dopad je v knizce .NET Performance:
Mimochodem, prave ten priklad, co jsem daval ja, je videt zde:
https://books.google.cz/books?…
Jak jsem psal v komentari vyswe, koukni na PRO .NET Performance.
.NET totiz jak JITuje, tak si zjistuje mj. specifikaci CPUcka a na tom zaklade dela treba optimalizace
Hmm na to jsem nepomyslel - jinak ta konkrétní ukázka byla pro "Any CPU"
Studovat to asi nebudu - už tak nevím co dřív, ale pokud se s námi sem tam podělíš o své poznatky - stejně jako tady - budu rád a jistě ne sám
Dej mi redaktorky právo a podelim se čas od času ve článcích
No být na mně, tak máš redaktora hned, ale taková práva tu nemám - budeš si muset o něj zažádat standardním způsobem - je to myslím někde v profilu
Zobrazeno 22 zpráv z 22.