Inlägg

Inlägg som zoomster2 har skrivit i forumet
Av zoomster2
Skrivet av abki:

Tid som krävs får du ta fram då det är klart vad systemet ska göra. De som ingår är det bara att sätta lämpliga inkörningsfaktorer på. Konton (antar att det är uppföljningen av tid) är samma för alla med en lämplig underindelning. Den får den ansvarige sätta upp.
Vad har licenser med utveckling att göra ?
Du behöver fokusera mer på vilka bra bitar som finns och inte på de problem som kan dyka upp, du kommer inte att orka igenom ens mindre jobb.

Det som @KAD skrev är faktiskt så det ser för många större projekt >1500h, speciellt mot industrin/kommun/stat eller där man har en motpart/beställare som driver ett parallellt industri/verksamhets projekt, och när man pratar om stora multi-nationella företag inom/utanför Sverige. Vanligtvis så kanske man behöver involvera 10+ olika team för att driva igenom de stora projekten.

Normal så ser inte en typisk utvecklare detta eftersom han/hon jobbar i sitt team och det är projektledarens roll att samla in och koordinera med andra team/projekt.

"Resurstilldelningen är baserad på hur många personer som sitter på bänken (det är inte de mest begåvade), inte när pengarna tar slut (för fort) eller hur mycket som ska göras (för få utvecklare för att klara deadline). Det blir till att lägga några manveckor på krismöten och omplanering när det blir tydligt."
Detta är typiskt när man mixar in-house med nya konsulter för utveckling och det teamet som kanske borde ta utvecklingen inte har tid eller mappar exakt mot vad som väntas levereras.

"Att skaffa fram test- och driftmiljöer samt konton och licenser till rätt utvecklare har ledtider på minst en månad och den på beställarsidan som kan göra det har tidig semester i år…"
Eftersom kod repositories ligger inom företaget som driver projektet (in-house) så måste alla nya konsulter on-boardas med nya datorer/inloggingskonton/server inloggnings konton. Licenser och rättigheter för t.ex. Azure DevOps Server, utvecklingsmiljöer, databaser måste beställas/sättas.
Nya servrar för system test/applikations integrations tester/produktion måste beställas. Server hallen börjar bli full och ledtiden för att köpa in den certifierade hårdvaran är längre än vanligt (https://www.dell.com/en-us/lp/dell-supply-chain-updates).

"Lösningen måste så klart uppfylla alla relevanta juridiska krav och interna policies. Nej, vi har inte dokumenterat vilka de är, arbetsgruppen som ska ta fram det är klara till jul. Glöm inte att halva arbetsflödet ska kunna genomföras i ett system som vi ska upphandla nästa år."
Olika länder har olika juridiska krav t.ex. av var data får sparas. Det händer att en standard lösning som redan används inte kan användas i ett land och helt plötsligt så måste en special lösning tas fram och naturligtvis så är det teamet som äger den lösningen fullbelagt de närmaste 3-4 månaderna.

Ibland så ska ett nytt COTS/SaaS system köpas in som det nya systemet som byggs ska agera med, men eftersom vilket system inte är helt bestämt så behöver man avvakta med detaljerna om vad som ska utföras däri och hur integrationen kommer att se ut.

En av många interna policies är att TLS 1.3 måste användas för all integration. Men det visar sig att en mainframe lösning som det nya systemet behöver hämta data från inte har support för det och måste uppgraderas men eftersom mainframe inte är utpekat som en prioriterat teknik så behöver infrastruktur/OS teamen lägga en extra begäran till den tekniska policy teamet att få börja arbetet.

Det som beskrev ovan finns men det är långt ifrån allt som är så komplext. Många gånger handler det om bara om att ta fram en lösning för ett verksamhets behov inom ett befintligt system. För de flesta företagslösningar så ligger 90% i backend och kanske 10% i frontend.

Av zoomster2

Började med Pascal och Turbo Pascal (blå bakgrund med gul text är kung).
Sen ett par år med C++ och tidig version av MSVC.
Efter det ett år med VB (ouch).
Efter det runt 2002/03, helt mot .NET/C#.
Runt 20 år senare jobbar jag fortfarande med .NET som utvecklare/arkitekt.

Alltså har det blivit allt inom Microsoft/.NET som classic ASP, MVC, Silverlight (fail) och senare.
Men använder/utvecklar idag mest C#/ASP.NET Core 6/7 (backend) med react/angular/blazor (JS/TS/razor) som front end (med tailwind, material eller helt eget).

Som storage är det mest MSSQL även om vi har en del i MongoDB och CosmosDB.

Som bas för hosting för apparna har vi Kubernetes eller OpenShift (båda Azure cloud eller on-prem) även om många andra delar ligger andra Azure tjänster.
Använder både GitHub och Azure DevOps för source-control. Git-actions till DevOps för build/deploy. Ibland med Terraform.

Som övervakning är det mest via OpenTelemetry (eller helt custom) och ElasticSearch/Kibana (logs+traces) + Prometheus/Grafana (metrics). Vi använder också AppDynamicssom alternativ.
Inom SAST (SonarQube)
Som DAST (BlackDuck/Appscan)

När man tittar på ett helt eko-system så spelar språket mindre roll. Det viktiga är att det finns skalbarhet i utveckling, utrullning, maintenance och övervakning.

Av zoomster2

Angående databaser så finns det plats för flera.
Vi har MSSQL som bas, men använder Cosmos DB eller Mongo DB (Atlas) eller Elasticsearch) när det finns behov.

Och vi har flera applikationer som använder både Dapper och EF i samma app.
Dapper fungerar perfekt då vi behöver stöd for flera typer av databaser (DB2, Oracle, MSSQL,..) i samma applikation.

Men från ett applikations/solution arkitekt perspektiv, så föredrar vi EF (Entity Framework) då vi ser att TCO (total cost of ownership) är lägre för system som använder EF.
Vi har också sett att EF blir bättre för varje version och många gånger är bättre än en att försöka att skapa en egen ORM/repository.

Ang. EF.
Som nackdel så krävs det att utvecklare förstår hur EF fungerar. Annars kan det bli helt fel, även om det blivit mycket bättre i senare versioner av EF. (Note: logga ut alla SQL kommandon och se vad som faktiskt görs).

Oavsett om du använder EF, ADO.NET, MongoDB etc., så måste du fortfarande sätta rätt index, 'isolation', partition, och hints för hög-presterande system.

Av zoomster2

Jag skulle rekommendera att gå via .NET (C#) men fokusera på Azure services, GitHub/GitHub actions, CI/CD, docker/containers.
Om du kan visa på att du kan några av dem någorlunda bra så spelar din kunskap i t.ex .NET inte så stor roll (om du har bara har är ok/nybörjare) och du har möjlighet att utveckla det mer på arbetsplatsen.
Det är brist på kompetens på allt som inte är ren utveckling men ändå ingår i dagens ansvar av en utvecklare.
Problemet är att tekniken går snabbare än utvecklingsspråken, och få utbildningar kan vara 'up-to-date'.
Kort så kan man säga att praktisk kunskap (som man kan visa) är alltid bättre än något på papper i form av utbildning.

Några länkar i (nästan) ordning ang .NET + Azure / GitHub / docker: (skippa om du redan kan)

Installera Visual Studio 2022
https://visualstudio.microsoft.com/vs/getting-started/

Bara för att komma igång med C# (online)
https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-cshar...

Skapa en websida med Blazor
https://dotnet.microsoft.com/en-us/learn/aspnet/blazor-tutori...
Några olika exempel med Blazor (4.5h trainings)
https://learn.microsoft.com/en-us/training/paths/build-web-ap...
All info om Blazor:
https://learn.microsoft.com/en-us/aspnet/core/blazor/?view=as...

Skapa ett konto hos Azure för gratis hosting av din Blazor app med mera.
https://azure.microsoft.com/en-us/free/

Skapa en gratis (12 månader) MSSQL databas
https://learn.microsoft.com/en-us/azure/azure-sql/database/fr...

Lägg till Entity Framework som ORM för en databas.
https://learn.microsoft.com/en-us/aspnet/core/blazor/blazor-s...

Skaffa en gratis variant av Azure DevOps för CI/CD. (enkelt sagt bygg och deployment)
https://azure.microsoft.com/en-us/pricing/details/devops/azur...

Skaffa en gratis GitHub konto (alternativ till ha allt på Azure DevOps)
https://github.com/join

Om du valde GitHub, titta på GitHub Actions för att deploya till Azure.
https://docs.github.com/en/actions/learn-github-actions
eller
https://learn.microsoft.com/en-us/azure/app-service/deploy-gi...
eller
https://chrissainty.com/building-blazor-apps-using-azure-pipe...

Hosta websidan via Azure Web Apps via DevOps.
https://learn.microsoft.com/en-us/azure/static-web-apps/deplo...

Lägg till Azure AD (login => authentication/authorization) via Azure AD.
https://learn.microsoft.com/en-us/aspnet/core/blazor/security...

Info om att installera docker lokalt
https://docs.docker.com/desktop/install/windows-install/

Kör din web app inom en container
https://learn.microsoft.com/en-us/dotnet/core/docker/build-co...

Lite om att använda docker/containers i Azure
https://learn.microsoft.com/en-us/dotnet/core/docker/introduc...

Av zoomster2

Från ett IT perspektiv.

Om du är anställd eller kontrakterad att jobba 8h dag så ska du jobba 8h/dag. Detta oavsett hur mycket du tillför under den tiden. Du ska 'stå till arbetsgivarens förfogande'.
Om du inte kan kan jobba de avtalsenliga timmarna, så kan du inte heller fakturera för 'påhittade' timmar avsett om anställd eller konsult.
Allt annat är bedrägeri/avtalsbrott!

Om du har har ett kontrakt om att utveckla/skapa en specifik funktionalitet som ligger inom ramen för avtalet (utan timavtal) med arbetsgivare/co-arbetsgivare så har du möjlighet att ta betalt för nedlagd tid/avtalat pris (inom rimlig gräns).

Kort:
Om du fakturerar för tid, så måste du också jobba den tiden för arbetsgivaren. (Annars är det bedrägeri)
Om du fakturerar per lösning/'feature' (utan min/max-timavtal), så är du fri att göra vad du vill.

Jag vet inga större IT bolag som tar in anställda, konsulter eller konsult grupper utan att sätta avtal om arbetstid.

När det gäller vad varje 'contributor/anställd' får tillbaka i lön jämfört med vad de bidrar i kompetens/effektivitet så är det utan tvekan så att det finns mer effektiva personer som borde kompenseras högre (2x, 3x, 4x) i lön. Men så ser inte arbetsmarknaden ut i idag tyvärr.

Av zoomster2

Min rekommendation är gå på .NET efter det jag läste i ditt inlägg.

Men viktigt att förstå är att oavsett val av front-end, back-end eller fullstack så är utbildningen bara första steget.

Det är vad du gör, hur mycket tar till dig och hur bra du blir som utvecklare är det som betyder någonting.
Vi (utvecklare) kan inte, som en läkare eller elektriker visa upp ett papper, och kunna säga att vi är certifierad utvecklare och att det skulle ha någon betydelse för en arbetsgivare. Det som betyder något är din nuvarande kompetens och framtida kompetens.

Vi som intervjuar dig tittar inte på vilken skola/utbildning du varit på, utan enbart på var du kan. Sedan testar vi dina praktiska kunskaper på det området och ser om du skulle passa in teamet.

Angående lön.
Efter att sagt detta så är software developer högst efterfrågat med helt OK löner överlag. Backend (inom större företag) (.NET/Java) har generellt högre löner än front-end utvecklare. Det är väldigt få som kan både front-end och back-end tillräckligt bra för att få lön över backend.

Liknande fråga och svar här:
Se inlägg #19648857

Av zoomster2

Jag kan bara hålla med @nordis generellt.
Är lite partisk eftersom vi har all backend inom .NET men olika typer av front-end (React, Angular, Blazor etc).

I min roll som architect/developer så håller jag 1-3 intervjuer per vecka med utvecklare med olika kompetenser, front-end, back-end och full-stack.

Från back-end utvecklare vill vi se kunskap i modern C# (.NET Core 3/5 och .NET 6) och att kunna förstå verksamhetens behov. Att kunna läsa mellan raderna och lista ut hur det ska göras och sedan kunna lösa detta i kod med hög kvalitet.

Från front-end utvecklare vill vi se UX före UI och kunna jobba tillsammans med back-end teamet. Vilken teknik (React, Angular, Blazor) är av mindre betydelse så länge som du är duktig på det du gör.

Full-stack behöver uppfylla båda back-end och front-end kraven.
Note 1: I 95% av fallen är denna personen bättre på front-end men kan lite Node.js, PHP men ingen djupare kunskap av faktiskt back-end utveckling. De tar vi nästan aldrig in.
Note2: För enterprise/stora bolag, det du ser från front-end är bara 2-10% av det som behövs på back-end sidan.

För både rollerna tittar vi på nuvarande kunskap, möjlig kompetens inom 3-6 månader, hur man passar in i ett team och något mycket viktigt.. eget driv.

I Sverige har vi hög efterfrågan på erfarna .NET utvecklare. Men vi tar kanske i var 10-15:e fall in en .NET utvecklare direkt från avslutad utbildning där vi ser en långsiktig bra utveckling. Vi tar nästen ingen direkt från en front-end utbildning.

Så, min rekommendation är att gå på .NET.
Men kom ihåg at det viktigaste är inte din utbildning, utan hur bra du är på det. Så koda, koda och koda mer.
Tip: Läs kod från GitHub eller ännu bättre, bidra med något där och lär dig mer.

Du kan inte jämföra mot andra yrken där efter avslutad utbildning du kan gå in med ett diplom som bevis. Faktisk kunskap är det enda som räknas.

Av zoomster2
Skrivet av spinxen:

Jag tycker generellt att många företag har tvingats tänka om när det gäller att rekrytera juniora profiler. Tycker det är lite av en myt numera att det krävs 5 års erfarenhet för att landa en junior position osv. Snarare skulle jag vilja påstå att ribban till arbetsmarknaden nog inte har varit lägre sedan IT-boomen i slutet av nittiotalet. En medioker talang som har 2 års KY-utbildning kan utan problem landa ett första jobb med 35-40k som ingångslön i någon av storstadsregionerna. Min arbetsgivare och många med oss letar snarare efter personer med dem rätta attributen, driv & viljan att lära sig - det är det viktigaste. När jag rekryterar så värderar jag ex. tidigare arbetslivserfarenheter högt, även om dem är från helt andra branscher. Jag anställer generellt hellre en nyexad KY-student med 5-10års erfarenhet från typ Circle K än en nybakad 23 åring från KTH. Det har varit en vinnande strategi hittils, win-win för bägge parter.

En bra poäng ang ribban till arbetsmarknaden. Vilket ger oss tillbaka till frågan "Är det brist på utvecklare?".
Nej, om vi tittar på alla som titulerar sig som utvecklare efter utbildning och kanske 6 månaders jobb.
Ja, om vi tittar på personer som faktiskt kan driva den digitalisering som företag/samhället behöver. Det finns inte tillräckligt med personer (engineers/architects inom sverige) som tekniskt kan driva allt som behövs.

Jag vet flera storbolag där man har gått tillbaka till en lägre tröskel för anställning. Att man anställer samma antal som man gjorde 2-3 år bakåt i tiden betyder inte att man fortfarande ser en brist på kompetenta utvecklare. Bara att det är svårare att hitta de som har erfarenhet.

Av zoomster2

Eller så kan man se det som:

En fotbolls metafor
[Management] Vi behöver utöka med en fotbollsspelare.
[HR] Det finns massor med fotbollsspelare på marknaden. Vi brukar få in 200 ansökningar som fotbollsspelare vid varje ny öppen position.
[Management] Det är viktigt att han/hon kan dribbla till vänster.
[HR] Det kan vi få tag på.

Det man många gånger från management sidan glömmer är att 1 utvecklare != 1 utvecklare. Vi gräver inte diken eller fixar en bil där utfallen alltid borde vara detsamma oavsett hur duktig du är. Hur många känner till de bästa top 10 dikesgrävande i världen?

Lönegapet mellan en Div3 spelare och en av top ligorna i europa är enormt.
Lönegapet mellan en 'medioker/standard' utvecklare och en inom top 100 i sverige är litet.

För något år sedan så pratades om "developer unicorns", där vissa utvecklare sägs kan producera x10 gånger så mycket som en 'normal' developer.
Som extra info. För något år sedan så gjorde vi en utvärdering av faktiskt contribution av kod/idéer/quality anonymt. Det visade sig att runt 5-10% personer var runt x4-6 så produktiva som standard inom deras team.

Om du ägde företaget som anställer, skulle du vilja anställa personer som spelat i de lägre diversionerna några år, går till jobbet och gör sitt, eller någon som spelat i de högre ligorna och sticker ut och försöker förbättra sig?

1 developer != 1 developer.

Av zoomster2

Jag tror det handlar om personlighet. Vissa vill bli så bra de kan inom sitt yrke och tycker det är kul att sitta utanför arbetstid och lära sig nya saker. Det finns en anledning till att barn/tonåringar drömmer om att bli fotbolls/ishockey/youtuber proffs.

Om du har intresset och ökar din kompetens snabbare än de runt omkring dig, så har du också en mycket större chans att kunna prova på nya saker och på så sätt få en roligare tid på jobbet.

Jobba gratis ska ingen göra. Krav på utbildning på obetald tid.. absolut inte. Men ibland så kanske det är en utbildning eller innovationsdag som drar över 8h men då ska man också debitera de extra timmarna.

Av zoomster2

Allt beror på hur du beställer. Du kommer att få tillgång till all kod som är utvecklat av leverantören.
Om du vill kan du ställa kravet att lösningen ska kunnas släppas som öppen källkod av dig efter leverans.
Du kan också begära att lösningen ska byggas runt en befintlig produkt (som kanske är open-source).

Men många gånger är det inte rimligt att själv ta fram lösning när det finns färdiga tjänster att använda.
Tex, så tror jag ni använder Office365 istället för att ta fram eget. Använder kanske ett lönesystem som ligger i molnet och man betalar per år för använda.
Att utveckla & drifta egna system är mycket dyrare än COTS/hyllprodukt.
Alla större företag har idag samma syn. COTS först och om kostnaden blir för hög (eller inte går) att anpassa COTS systemet till sin egen process, köp in eller egenutveckla en egen lösning.

Allt utom de enklaste system brukar komma med en en del beroenden på andra mjukvarukomponenter, infrastruktur och tjänster.
Normalt så är det inte koden som gör att man blir beroende av leverantören efter leveransen är gjord, utan komplexiteten i integrationer, affärsprocesserna, drift och och felsökning. Kompetensen finns normalt inte hos beställaren, vilket är rimligt eftersom mjukvaru utveckling och system drift troligtvis inte är deras kärnverksamhet.

Tillbaka till open-source.
Leverantörer nästan garanterat använda komponenter eller tjänster som är open-source.
Att tillhandahålla en hel kundanpassad lösning som open-source ger inte mycket åt beställaren. Det är bara om man tar fram en tjänst/platform som är tänkt att andra ska kunna återanvända. Men de allra flesta sådana system tas fram från mjukvarubolagen själva så de kan få så stor spridning av tjänsten/komponenten och sedan ta betalt för support etc.

Sikta istället på att vara öppen med vilka tjänster och komponenter lösningen är uppbyggd av. Lägg sen till API'er som tredje part kan använda sig av för att hämta information eller utföra tjänster mot.

Av zoomster2

Standard idag är att skapa en SPA (single page application) web applikation för 'truly' cross platform (utifrån en användare).
Då spelar det ingen roll vad du använder som frontend/backend.

Med .NET MAUI (.net 6) kommer du kunna skapa UI applikationer för Android, iOS, och Windows men inte Linux.

Jag skulle ta en titt på @Elgot inlägg. Om du känner att du behöver byta språk för att du har problem med en komponent (QChart), så borde du lösa problemet eller byta komponent. Att helt byta språk är fel väg att gå om detta är det enda bekymret.

Av zoomster2

Som alltid, det beror på vad du vill förmedla. Det finns ingen perfekt fontstorlek för alla områden.

Men som referens:
Lite information = Större storlek
Mer information horisontellt = Lägre storlek.
Starta med 16px för majoriteten av texten på din sida. När det känns som att man måste scrolla för att hitta vad man söker, designa om sidan först, om det inte går, dra ner till 14px.
Om du försöker få användare att navigera öka storleken.

Gå inte lägre än 12px.

Men allt beror på vilken upplevelse du vill att dina besökare ska ha.
Ovana web användare eller fokus på rubriker, mindre information och större font.

Tex.
omni.se (24px-18px),
svt.se (72px-17px)
shl.se (12.8px-14.4px)

Av zoomster2

Några saker du kan testa.
1) Kör en Repair på din visual studio installation.
2) Återställ VS inställningarna. Kör devenv /ResetSettings från cmd.
3) Logga och felsök via devenv /log "%USERPROFILE%\MyVSLog.xml" från cmd.

Annars skulle jag rekommendera att du använder "Report a problem" direkt från Visual Studio.
https://docs.microsoft.com/en-us/visualstudio/ide/how-to-repo...
https://docs.microsoft.com/en-us/visualstudio/ide/how-to-incr...

Av zoomster2

EDIT: Läste det som att du ville flytta ut applikationen på nätet inte SQL servern. Så du kan bortse från det jag skev nedan.
Men frågan om du kan visa lite kod kvarstår.

Det ringer en varningsklocka här.

Du kommer aldrig att kunna flytta ut den här applikationen på nätet eftersom du troligtvis kopplar upp dig mot en databasen direkt från Windows applikationen. (Om du tänker distribuera en tom databas med applikationens .exe så kan du bortse från det jag skriver nedan.)
Om du gör det så bör du räkna med att din databas kommer att läsas av obehöriga, förstöras etc.
Jag antar också att detta är för ett företag, så hoppas verkligen att den inte innehåller någon personlig information, som namn, adress etc och accessen mot databasen inte delas med något annat.

Du bör skriva applikationen så att den pratar med ett API som körs på en central server någonstans som i sin tur pratar med databasen. Och det måste finnas JWT token baserad säkerhetslösning mellan applikationssidan och API't.

Vet att det låter krångligt och att du bara vill att ha något som fungerar.

Men tillbaka till din fråga, kan du visa relevanta delar av koden där du skriver/läser till/från textboxen?

Av zoomster2

Om du är riktigt nyfiken, så prova några verktyg från https://docs.microsoft.com/en-us/sysinternals/ så att du kan se mer i detalj vad som händer.

Av zoomster2
Skrivet av AplAy:

Jag försöker förstå mig på utan att riktigt hoppas på någon lösning om ett program som körs i Windows 10 (har även provats i Windows 7, Vista och XP). Programmet är Sound Forge som tidigare ägdes av Sony Vegas innan det förvärvades/såldes till Magix.

Programmet har ett fascinerande problem när dess funktion Tools -> Batch Converter körs vilket har varit kvar sedan minst version 6.0 och finns fortfarande kvar idag i den senaste versionen (16 eller vad det är).

Vad som händer är följande tills att programmet blir så långsamt och hänger sig/kraschar:
1. Jag lägger till 4000 wav filer som fem effekter skall appliceras för alla separata wav-filer.

2. Jag väljer och justerar de effekter som skall appliceras på alla dessa tillagda wav-filer.

3. Jag väljer att nuvarande wav-filer skall skrivas över i samma mapp.

4. Jag startar Batch convertern.

5. Den tuffar på och efter cirka 1300 filer så börjar datorn bli oerhört långsam med datormusen i eftersläpning på datorskärmen. Trots detta visar aktivitetshanteraren endast mellan 12-20 % CPU användning (Ryzen 5900x) och grafikkortet 10-20% användning (RTX3090).

Alltså, programmet blir långsammare och gör hela datorn långsammare trots att minnes- och CPU-användningen förblir lika mycket. Vad är det då som verkar "flödas över"? Jag ser oxå att efter cirka 1000 filer så börjar programmet bli slöare med varje bearbetad ljudfil. Allt görs på en M.2- NvME-hårddisk

När jag kollar i felmeddelande vissa gånger det kraschat så rapporterar programmet att felet skall ha orsakats i Kernel.dll-fil i själva Windows och inte i programmet i sig.

En intressant detalj är att långsammare datorer (långsammare CPU) hänger sig vid tidigare antal filer trots att samma batch körs (samma och lika många wav-filer). Detta får mig att fundera på om det är någon slags "overflow"-bug som orsakas trots att man inte ser någon signifikant ökning i minnes- eller CPU-användning?

Jag är bara nyfiken på hur ett program helt plötsligt kan göra en dator segare utan att CPU-användningen når 100% för att sedan krascha. Vad är det för mystisk programmering med hur programmet kommunicerar med Windows som får det att bli så här?

Spekulerar lite här.
Men några exempel på vad som skulle kunna påverka.

Det är en 32-bitars applikation. Maxar minnet och blir då långsamt.
Antal windows handles. När/om man slår i taket kan man få ett antal konstiga fel.
Dåligt implementerad intern algoritm som tar längre tid för varje sak man processar.

Av zoomster2
Skrivet av PapaDiouf:

Jäkla hjälte du är, tack snälla för många bra tips! Fick man lära sig något nytt idag med. Hade gärna velat bli bättre på events o delegates, för att kalla på diverse metoder efter en viss tid, men har väldigt svårt att få ihop logiken, plus att min uppgift ska va inne om några dagar så vill inte slösa alldeles för mycket tid på det just nu, dock måste jag göra det efter. Så kommer nog gå på loopandet du gav bra exempel på, now < to osv! Men för att ändå ställa någon fråga:

"public ICollection<Animal> Animals { get; set; } = new List<Animal>();"
Jag har exempelvis en IColltection<Hamster> i min ExerciseArea klass, där jag ska släppa ut hamstrarna, vet dock inte ens om jag använder den, för när jag lägger till Hamstrar i ExerciseArea kör jag:

getMaleHamster[i].ExerciseAreaID = availableSpaceInExerciseArea[i].ExerciseAreaID;

Vad fyller den för funktion?

Angående events o delegates, jag har ett event som skriver ut information om hamstrarna efter min metod har körts:

class HamstersOutOnExerciseAreaEventArgs : EventArgs { public HamstersOutOnExerciseAreaEventArgs(int numberOfHamstersOutOnExerciseArea = 0, string name = null, string gender = null) { NumberOfHamstersOutOnExerciseArea = numberOfHamstersOutOnExerciseArea; Name = name; Gender = gender; ArrivalExerciseArea = Program.timeDiff; } public DateTime ArrivalExerciseArea { get; set; } public int NumberOfHamstersOutOnExerciseArea { get; set; } public string Name { get; set; } public string Gender { get; set; } }

Sedan Invokar jag eventet efter första kollen, jag har en klass PrintToConsole där jag har håller texten som ska skrivas ut. Om jag exempelvis vill köra min metod när min fiktiva tid slår en timme genom hela dagen, har du nån bra sida för att läsa på om det? Inte microsofts gärna för där har jag svårt att få till det xD Eller något enkelt exempel som jag kan jobba med?

Utan att att se hela koden men om du kommer att använda en loop:
Varför inte titta på tick räknaren och anropa metoden print om jämn timme.

Om du använder en timer och simulerad tid:
Kanske titta på tiden om den är jämn timme eller om du har sparat när det senaste 'jobbet' kördes i databasen, se om det har gått en timme sen senaste 'jobbet'.

Hur du anropar till print klass är helt beroende på hur den är definerad och vart den ligger. Men ett varför inte ett enkelt metod anrop eller via en delegat/action som jag visade i exemplet ovan.

[Edit]
Och angående

getMaleHamster[i].ExerciseAreaID = availableSpaceInExerciseArea[i].ExerciseAreaID;

Det ser ut som du tilldelar i vilket exercise område hamstern ska hamna i. Men lite svårt utan att se koden.

Av zoomster2
Skrivet av PapaDiouf:

Tjena! Kan jag göra så att min Timer triggar en metod efter att min clock har kört en timme?

private static DateTime clock = DateTime.Now.Date.Add(new TimeSpan(7, 0, 0)); for(int i = 0; i < 100; i++) { var timer = new System.Threading.Timer( e => mm.ThreadLetHamstersPlay(), // Denna metoden vill jag null, TimeSpan.FromHours(clock.Hour), // ska starta efter en timme, alltså 10 varv TimeSpan.FromHours(clock.Hour) // sedan att den körs varje timme ); clock += TimeSpan.FromMinutes(6) }

Det finns många sätt att göra det du vill.
Visar på två sätt, antingen via en timer eller som de flesta nog rekommenderar en vanlig loop.
Det finns naturligtvis massor att justera i koden nedan, men bara för att ge dig några exempel.

namespace HamsterCare { using System; using System.Collections.Generic; using System.Timers; using Microsoft.EntityFrameworkCore; internal class Program { public delegate void ShowStatusDelegate(); public delegate void ShowStatusDelegateWithArguments(Status status); public static event ShowStatusDelegate ShowStatusEvent; public static event ShowStatusDelegateWithArguments ShowStatusEventWithArguments; public static void Main() { using var context = DatabaseHelper.NewContext(); ManageFacilityByTimerAndUsingActionCallback(); // or use this // ManageFacilityByLoopAndUsingDelegateCallback(); Console.ReadKey(true); } private static void ManageFacilityByTimerAndUsingActionCallback() { // using a timer to trigger a check if work is needed (uses simulated time) // also uses an action but can be replaced by a delegate var exact = DateTime.Now; var from = new DateTime(exact.Year, exact.Month, exact.Day, 8, 0, 0); var to = new DateTime(exact.Year, exact.Month, exact.Day, 15, 0, 0); var ticks = 0; var timer = new Timer(300); timer.Elapsed += (sender, args) => { var now = GetSimulatedDateTime(@from, ticks++); DoWorkWithAction(now, ShowStatus); // or use this // DoWorkWithActionAndArguments(now, ShowStatusWithArguments); // remember to stop the timer if after 15.00 if (now >= to) { timer.Stop(); } }; timer.Enabled = true; } private static void ManageFacilityByLoopAndUsingDelegateCallback() { // using a loop a check if work is needed // also uses a delegate but can be replaced by an action var exact = DateTime.Now; var now = new DateTime(exact.Year, exact.Month, exact.Day, 8, 0, 0); var to = new DateTime(exact.Year, exact.Month, exact.Day, 15, 0, 0); ShowStatusEvent += ShowStatus; // or use this //ShowStatusEventWithArguments += ShowStatusWithArguments; // loop through between 08.00 and 15.00 with 10 minutes steps for (; now < to; now = now.AddMinutes(10)) { DoWorkWithDelegate(now); } } private static void DoWorkWithDelegate(DateTime now) { using var context = DatabaseHelper.NewContext(); // perform all work needed // .. // important to do before printing out the status context.SaveChanges(); // use a delegate (either with or without an argument) Program.ShowStatusEvent?.Invoke(); Program.ShowStatusEventWithArguments?.Invoke(new Status()); } private static void ShowStatus() { using var context = DatabaseHelper.NewContext(); // get the current status from the database and print to the console // .. Console.WriteLine("Show status without arguments.."); } private static void ShowStatusWithArguments(Status status) { // use the argument without directly and not go through the database // .. Console.WriteLine("Show status with arguments.."); } private static void DoWorkWithAction(DateTime now, Action callback) { using var context = DatabaseHelper.NewContext(); // perform all work needed // .. // important to do before printing out the status context.SaveChanges(); // use the action callback to report current status callback(); } private static void DoWorkWithActionAndArguments(DateTime now, Action<Status> callback) { using var context = DatabaseHelper.NewContext(); // perform all work needed // .. // important to do before printing out the status context.SaveChanges(); // use the action callback to report current status var status = new Status { // ... }; callback(status); } private static DateTime GetSimulatedDateTime( DateTime from, int ticks) { // each tick is treated as 10 min return from.AddMinutes(ticks * 10); } } public class Status { public bool Whatever1 { get; set; } public List<Animal> Whatever2 { get; set; } = new List<Animal>(); } public class Facility { public int Id { get; set; } public ICollection<Animal> Animals { get; set; } = new List<Animal>(); } public class Animal { public int Id { get; set; } public Gender Gender { get; set; } public DateTimeOffset ArrivalTime { get; set; } public DateTimeOffset FeedingTime { get; set; } public int FacilityId { get; set; } public Facility Facility { get; set; } } public enum Gender { Male, Female } public class DaycareContext : DbContext { public DaycareContext(DbContextOptions<DaycareContext> options) : base(options) { // empty.. } public virtual DbSet<Facility> Facilities { get; set; } public virtual DbSet<Animal> Animals { get; set; } } internal class DatabaseHelper { public static DaycareContext NewContext() { const string host = "(LocalDB)\\MSSQLLocalDB"; const string database = "hamster_care"; var connectionString = $"Data Source={host};Initial Catalog={database};Integrated Security=True;"; var dbContextBuilder = new DbContextOptionsBuilder<DaycareContext>(); dbContextBuilder.UseSqlServer(connectionString); return new DaycareContext(dbContextBuilder.Options); } } }

Av zoomster2