Anonymní profil Kartmen – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Kartmen – Programujte.comAnonymní profil Kartmen – Programujte.com

 

Příspěvky odeslané z IP adresy 88.100.186.–

Kartmen
MS SQL › Import co nejrychleji
8. 9. 2020   #386588
Kartmen
MS SQL › Import co nejrychleji
1. 9. 2020   #386538

Možná je dlouhý čas zápisu dán testováním unikátnosti klíčů a domén.

Kartmen
.NET › návrh třídy
17. 8. 2020   #386455

#10 Kit
To jsem také někde četl, ale v praxi jsem to moc neviděl, 20 řádků je krutě málo, že to ani třeba v knihovně net frameworku vždy nedodrží. Já začínam mít výčitky až kolem 200 řádků :)

Kartmen
.NET › návrh třídy
17. 8. 2020   #386453

Dobrá dobrá, i když je to o řádek delší na použití, je lepší použít metodu. Díky za pomoc.

Kartmen
.NET › návrh třídy
17. 8. 2020   #386452

#6 JerryM
No jasně, já bych si s tím poradil:) Ale ten kód občas čte někdo další, nebo používá třídy.

Kartmen
.NET › návrh třídy
17. 8. 2020   #386449

#4 Kit
Pokud parsování selže, tak standardně dělam nějaký zápis aspoň do logu. Ve většině případů toho co jsem dělal, tak chybné záznamy nejsou problém a běžně se v souboru vyskytují. To se mi ještě nestalo, že bych potřeboval znovu originál (všeho). Pokud jsou data ok, vytvoří se z nich objekt, pokud nejsou, tak se zapíše (chybný) originál. Následně už iteruju jen vytvořené objekty z platných záznamů.

Šlo mi ale o ten konstruktor, jestli je zvěrstvo udělat 50ti, 100, 500, nebo více řádkové konstruktory, nebo je to na vkusu každého programátora?

Kartmen
.NET › Vlákna, jak je ukončit
6. 3. 2020   #385593

Díky za odpověď, vlastně něco jako ThreadPool se snažím napsat. ThreadPool použiju třeba příště, ale chtěl bych si to zkusit. Jsem to nazval blbě, vlákno bych chtěl nejlépe zachránit (vytvořit nové trvá), to co chci ukončit je kód, který na vláknu běží a nahradit ho jiným, když už není výsledek předchozího potřeba. Co jsem zatím napsal funguje asi takto: do mojí alternativy ThreadPoolu se posílají akce, které mají proběhnout, třída je umisťuje na volná vlákna. Když se jedna akce spočte, tak se další umístí na stejné vlákno. Problém je co s akcí, která je signalizovaná jako již nepotřebná, ale už na nějakém vlákně běží. Tady to nejspíš rozložím na možnost, kdy jde spuštěnému kódu předat, že se má ukončit a pokud to nelze, tak vlákno na tvrdo zničit a udělat nové... což ale může vést k problémům. Řešením by také bylo nechat akci doběhnout, pokud nebude trvat dlouho, tady ale zase nemam žádnou predikci za jak dlouho může akce skončit. Jak (pokud) možnost předčasného ukončení Tasku řeší ThreadPool?

Kartmen
.NET › C# volání konstruktoru přes…
12. 12. 2019   #385022

Ahoj, našel jsem kód, který má fungovat oproti třídě reflection, kde se pro vytvoření třídy používá Activator.CreateInstance(...), mnohem rychleji. Nechápu proč to nefunguje pokud jsou parametry konstruktoru s modifikátorem jako je in, ref, out. V debuggeru to na chybové rádce píše, že se přiřazuje parametr typu s modifikátorem ByRef, ale očekáván je typ bez tohoto modifikátoru. Pokud se ale kouknu na proměnnou typu ConstructorInfo, tak tam je, že konstruktor má parametr s modifikátorem ByRef a stejně tak proměnná parametru... tak proč to nejde.

V kódu je vykomentováno odstranění modifikátoru ByRef z typu, pokud je ale tato část, která aspoň podle mě přepisuje správné typy na špatné, součástí kódu, tak to funguje, což je druhá záhada.

public delegate T ObjectActivator<T>(params object[] args);

public ObjectActivator<T> GetActivator<T>(System.Reflection.ConstructorInfo ctor)
{
     System.Reflection.ParameterInfo[] paramsInfo = ctor.GetParameters();
     ParameterExpression param = Expression.Parameter(typeof(object[]), "args");
     Expression[] argsExp = new Expression[paramsInfo.Length];

     for (int i = 0; i < paramsInfo.Length; i++)
     {
         Expression index = Expression.Constant(i);
         Type paramType = paramsInfo[i].ParameterType;

         //??? kod funguje po odstranění ByRef z typu
         // if (paramType.IsByRef == true) 
         //     paramType = paramType.GetElementType();
         //???

         Expression paramAccessorExp = Expression.ArrayIndex(param, index);
         Expression paramCastExp = Expression.Convert(paramAccessorExp, paramType);
         argsExp[i] = paramCastExp;
     }

     NewExpression newExp = Expression.New(ctor, argsExp); //error
     LambdaExpression lambda = Expression.Lambda(typeof(ObjectActivator<T>), newExp, param);

     return (ObjectActivator<T>)lambda.Compile();
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý