A simple performance comparison between approaches encouraged by F# (immutability and functional programming) and C# (mutability and OOP). Which one would you choose?
Daj się poznać 2017 2789 dni, 9 godzin, 53 minuty temu 118 źrodło rozwiń
Podczas pracy nad moim nowym projektem SewingMachine zacząłem zastanawiać się, czy w szczególnych wypadkach, serializacja obiektów nie mogłaby zachodzić szybciej. Zachęcam do poznania podejścia, które pozwala na 10x (słownie: dziesięć razy) szybszą serializację, zgodną z formatem protobuf-net.
Paczka wartościowych materiałów, które możecie znaleźć w sieci. Jeżeli chcesz zapoznać się z pozostałymi ciekawymi linkami możesz zrobić to tutaj...
Reading time ~10 minutes This article is Part 2 in a 2-Part Series. Part 1 - What is the simplest database?Part 2 - This Article The previous post laid out the most minimum requirements for something to be called a database. While they may be too bare bones for many, there are a lot of databases that don’t fulfill even half of them, and this isn’t stopping from using them on a daily basis. The last time I’ve looked at files, this time something a bit more complex - key-value databases. The idea be...
Architektura 2820 dni, 10 godzin, 16 minut temu 45 źrodło rozwiń
Reading time ~4 minutes This post is an analysis of a very interesting optimization proposed by Nicholas Frechette in the comments under the previous post. He proposed to use one of the oldest tricks in performance cookbook - divide and conquer. Well, it did not turn out as I expected.Saga Before I go further here are some link to the previous posts on the problem of calculating similarities and then optimizing. This thread grew to a few post. Here are all of them:How I calculate similariti...
Sztuka programowania 2903 dni, 12 minut temu 82 źrodło rozwiń
In previous post I've shown how a temporary table can be generated based on IQueryable and then reused in subsequent queries. I have also pointed out a serious limitation. The goal of this post is to address that limitation and touch on unit testing aspect.
Reading time ~2 minutes This post was inspired by a discussion on Reddit that followed my previous post In this post, I will cover a suggestion by BelowAverageITGuy that cut down the total execution time by almost one hour. Saga Before I go further here are some link to the previous posts on the problem of calculating similarities and then optimizing it grew to few post. Here are all of them:How I calculate similarities in cookit?How to calculate 17 billion similaritiesIndependent code in ...
Sztuka programowania 2914 dni, 8 godzin, 28 minut temu 96 źrodło rozwiń
Reading time ~1 minute This will be a fast errata to the previous one. This time I will expand the oldest performance mantra: The fastest code is the one that doesn’t execute. Second to that is the one that executes once Last time I’ve forgot to mention one very important optimization. It was one of two steps that allowed me to go from 1530 to 484 seconds in the sample run.Saga Before I go further here are some link to the previous posts on the problem of calculating similarities and then...
Programowanie rozproszone 2927 dni, 9 godzin, 57 minut temu 49 źrodło rozwiń
Reading time ~6 minutes Last time I’ve shown how I’ve gone from 34 hours to 11. This time we go faster. To go faster I have to do less. The current implementation of Similarity iterates over one vector and checks if that ingredient exists in the second one. Since those vectors are sparse the chance of a miss is big. This means that I am losing computational power on iterating and calling TryGetValue. How to iterate only over the mutually owned ones and do it fast? Saga Before I go furth...
Sztuka programowania 2924 dni, 9 godzin, 37 minut temu 59 źrodło rozwiń
I'm a huge fan of entity based and result set based relational mapping (classic ORMs). I'm also huge fan of DML based relational mapping (micro ORMs). In general I'm a huge fan of every technology that allows me to get the job done in the best possible way. I believe that one should never limit himself to single approach within a project - it should always be about choosing the best tool for the job. But sometimes there are real life constraints (licensing, business, politics etc.) which are limiting the...
Attribute routing (RouteAttribute) is a quite handy feature of ASP.NET MVC. It allows you to have nice looking URLs that everybody has already accustomed to and your client surely loves it. Plus it hides your true controller/action structure which sometimes might be desirable. But there's one catch. As your web app gets bigger and bigger, attribute routing might have a negative performance impact on your WHOLE website.
Reading time ~6 minutes This post is covering a subset of what I am talking in my talk How I stopped worrying and learned to love parallel processing (currently only in polish). This will cover on how, in terms of performance, AsParallel can kick you in a place where it hurts a lot, simultaneously being a blessing in terms of… performance. How is that? Let’s look at someHistory AsParallel was introduced as an extension to LINQ with TPL in .NET 4.0. In theory, it’s God’s sent. The promise w...
Architektura 2940 dni, 6 godzin, 31 minut temu 117 źrodło rozwiń
Kontynuując wątek LINQ, który podjąłem jakiś czas temu, poruszę dziś temat optymalizacji operacji jakie wykonujemy na kolekcjach. Na starcie muszę się przyznać, że tytuł nie jest do końca zgodny z prawdą, bo trzy słowa to o wiele za mało, by wejść w głębiej w temat optymalizacji zapytań. Są jednak 3 metody, które można wykorzystać do znacznego przyspieszenia wykonywania operacji w bardziej rozbudowanych łańcuchach przy minimalnym nakładzie pracy.
Reading time ~4 minutes Diagnosing high memory usage can be tricky, here is the second part of how I found what was hogging to much memory in our system. In the previous post I’ve wrote how to create a memory dump and how many possibilities of catching just the right moment for it ProcDump has. When trying to analyze memory leaks, or high memory usage (not necessary meaning a leak) we have a few ways to approach it: Attach a debugger There are many problems with this approach, to name a fe...
Reading time ~2 minutes I’m taking a short break from Hangfire series, but I will get back to it. This time - Where did my memory go ? Or to be more exact: Why is this using so much memory? The story starts with one IIS application pool using around 6 Gigabytes of memory on one of our test environments. It was several times above the values that we expected it to use, so we decided to investigate. Without much thinking we fired up Visual Studio installed on the test server, and attached to the proce...
Architektura 2999 dni, 10 godzin, 9 minut temu 64 źrodło rozwiń
Just how long does garbage collection take in .NET? Which generation takes longer?
Sztuka programowania 3058 dni, 5 godzin, 52 minuty temu 124 źrodło rozwiń
Imagine that you have a service, which receives requests to execute specific methods, possibly from a number of different underlying libraries that you don’t want to expose directly. Possible examples are web services. The request comes in as a number of string values (method name, parameters etc.) and you need to respond with results. So you have inherited a project with API that starts with a method: object Invoke(string methodName, object[] parameters); You now have to call variety o...
Over the last year on my spare time, I’ve been working on profiler for ASP.NET apps - netric.io. This small tool instruments methods from chosen assemblies and visualizes statistics of their execution times. It has got lower priority for me for a long time because of “Daj Się poznać” and other things but I think this project is worth to finally shed some light on it. Right now, the tool does just one thing: for every HTTP request, it generates methods time visualization like this (click to enlarge): ...
One of the steps in cookit is calculating similar recipes. This is what you can see on the left on the recipe page like this For the sake of clarity and manageability it’s scheduled as separate Hangfire jobs. Because cookit is running 5 workers, so similarities are calculated for 5 websites concurrently. The process uses cosine similarity, so it allocates a huge list at start and calculates similarities. A very CPU heavy operation. So some time after triggering all recipes recalculation I saw this in...
Anyone who made any HackerRank problems considering performance has seen this phrase in the assignment: “watch out for slow IO”. We are used to thing about files, databases and such as potentially slow IO, but the Console? Yes, and you will be amazed how much. Couple words about the setup. I am using NLog with file target (for normal logging) and mail target (for total failure, and aggregated reports). When debugging or profiling I run the process as a con...