{"id":2269,"date":"2020-10-25T22:21:59","date_gmt":"2020-10-25T21:21:59","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=2269"},"modified":"2020-10-26T09:39:23","modified_gmt":"2020-10-26T08:39:23","slug":"net-core-performance-nyomozas","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2020\/10\/25\/net-core-performance-nyomozas\/","title":{"rendered":".NET Core performance nyomoz\u00e1s"},"content":{"rendered":"\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core\/\" data-type=\"URL\" data-id=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core\/\">Sok<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core-2-1\/\" data-type=\"URL\" data-id=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core-2-1\/\">sz\u00e9pet<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-5\/\" data-type=\"URL\" data-id=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-5\/\">lehet<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core-3-0\/\" data-type=\"URL\" data-id=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-core-3-0\/\">olvasni<\/a>, milyen durva optimaliz\u00e1l\u00e1sok csin\u00e1ltak a .NET Core-ban. Annyira \u00e9lni akartam ezekkel, hogy a tradinghez \u00edrt backtesteremet \u00e1tportoltam Core 3.1-re. A WCF \u00e9s a WPF r\u00e9szek ig\u00e9nyeltek n\u00e9mi googliz\u00e1st, de nem v\u00e9szes a migr\u00e1ci\u00f3.<br>Van egy nagyon CPU intenz\u00edv k\u00f3d a backtesterben, ez t\u00f6bb milli\u00f3 t\u00f6mb m\u0171veletet \u00e9s d\u00e1tum \u00f6sszehasonl\u00edt\u00e1st v\u00e9gez. Erre voltam k\u00edv\u00e1ncsi, mennyit gyorsul az \u00faj .NET assembly-ket haszn\u00e1lva.<br>.NET 4.8:<br>00:00:00.6295321<br>00:00:01.2317440<br>00:00:00.6597345<br>00:00:01.2434665<br>Min: <strong>629.5321<\/strong><\/p>\n\n\n\n<p>.NET Core 3.1:<br>00:00:01.4422192<br>00:00:01.3073163<br>00:00:01.6955676<br>00:00:01.2051358<br>Min: 1205.1358<\/p>\n\n\n\n<p>Ez siralmas. El\u0151sz\u00f6r azt hittem az\u00e9rt, mert debug, nem optimaliz\u00e1lt k\u00f3dban futtattam a core-os r\u00e9szt, de nem, abban 2.5mp a fut\u00e1sid\u0151.<\/p>\n\n\n\n<p>Ha l\u00fad legyen k\u00f6v\u00e9r, felraktam a .NET 5 RC2-t, Visual Studio Previewt, \u00e9s leforgattam .NET 5 al\u00e1 is ugyanazt a k\u00f3dot:<\/p>\n\n\n\n<p>00:00:01.2580593<br>00:00:01.3729454<br>00:00:01.2055221<br>00:00:01.5244462<br>Min: 1205.5221<\/p>\n\n\n\n<p>V\u00e9letlen, de msre ugyanaz j\u00f6tt ki, mint .NET Core 3.1 alatt (gondolom kb. ugyanaz a k\u00f3d van a kett\u0151 m\u00f6g\u00f6tt).<\/p>\n\n\n\n<p>Azt\u00e1n r\u00e1j\u00f6ttem, hogy sok desktop appban is Server GC-t haszn\u00e1ltam, mert t\u00f6bbsz\u00e1l\u00fa terhel\u00e9sn\u00e9l <a href=\"http:\/\/soci.hu\/blog\/index.php\/2009\/06\/11\/a-tobbszalu-skalazas-nehezsegei\/\" data-type=\"URL\" data-id=\"http:\/\/soci.hu\/blog\/index.php\/2009\/06\/11\/a-tobbszalu-skalazas-nehezsegei\/\">sokkal jobban ki lehet haszn\u00e1lni a CPU-kat<\/a>.<\/p>\n\n\n\n<p>Core-ban m\u00e1sk\u00e9pp kell \u00e1ll\u00edtani, de itt is <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/run-time-config\/garbage-collector\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/core\/run-time-config\/garbage-collector\">lehet<\/a>. Hozz\u00e1teszem azonban, hogy a j\u00f3 eredm\u00e9nyek Workstation GC-vel j\u00f6ttek ki .NET 4.8 alatt.<\/p>\n\n\n\n<p>Mindenesetre background server GC eset\u00e9n ezek a sz\u00e1mok:<\/p>\n\n\n\n<p>00:00:00.7827110<br>00:00:00.7870250<br>00:00:01.3079196<br>00:00:00.7937517<br>Min: 782.711<\/p>\n\n\n\n<p>Ez m\u00e1r sokkal k\u00f6zelebb van a kiindul\u00e1shoz. Gondoltad volna, hogy ekkora hat\u00e1sa van a GC-nek?<\/p>\n\n\n\n<p>Ha nem background\u00a0(hanem blocking) server GC-t haszn\u00e1lok, akkor:<\/p>\n\n\n\n<p>00:00:00.9668477<br>00:00:00.7707329<br>00:00:00.8736540<br>00:00:00.4659059<br>Min: <strong>465.9059<\/strong><\/p>\n\n\n\n<p>Na, ez m\u00e1r igen! 630 helyett 466ms.<\/p>\n\n\n\n<p>De akkor ez \u00fagy igazs\u00e1gos, hogy .NET 4.8 alatt is megn\u00e9zz\u00fck a server GC-kel a m\u00e9r\u00e9st.<\/p>\n\n\n\n<p>Concurrent (background) GC:<\/p>\n\n\n\n<p>00:00:01.5112052<br>00:00:01.7877981<br>00:00:01.7735863<br>00:00:01.9077548<br>Min: 1511.2052<\/p>\n\n\n\n<p>Blocking GC:<\/p>\n\n\n\n<p>00:00:01.4676091<br>00:00:01.7899143<br>00:00:01.5936619<br>00:00:02.0141916<br>Min: 1467.6091<\/p>\n\n\n\n<p>Workstation GC (ezzel ment az eredeti m\u00e9r\u00e9s):<\/p>\n\n\n\n<p>00:00:01.4541448<br>00:00:01.7498414<br>00:00:01.9155145<br>00:00:01.7816521<br>Min: 1454.1448<\/p>\n\n\n\n<p>Na, ez meg mi? \u00dagy l\u00e1tszik VS Preview alatt a net48-windows moniker .NET 5 k\u00f3dot ford\u00edtott be. net48-ra \u00e1t\u00edrva m\u00e1r j\u00f6nnek a r\u00e9gi sz\u00e1mok.<\/p>\n\n\n\n<p>WS, Blocking GC:<\/p>\n\n\n\n<p>00:00:00.9853411<br>00:00:00.6656316<br>00:00:01.1928848<br>00:00:00.7570509<br>Min: 665.6316<\/p>\n\n\n\n<p>WS, Background\u00a0GC:<\/p>\n\n\n\n<p>00:00:00.6371798<br>00:00:01.0235119<br>00:00:00.6491366<br>00:00:01.2766926<br>Min: 637.1798<\/p>\n\n\n\n<p>Server, Blocking GC:<\/p>\n\n\n\n<p>00:00:00.9851811<br>00:00:00.6396851<br>00:00:01.4888114<br>00:00:00.6327586<br>Min: 632.7586<\/p>\n\n\n\n<p>Server, Background\u00a0GC:<\/p>\n\n\n\n<p>00:00:00.7241423<br>00:00:01.0104857<br>00:00:00.6526001<br>00:00:01.2343597<br>Min: 652.6001<\/p>\n\n\n\n<p>Ez a n\u00e9gy eset kb. ugyanaz, zajhat\u00e1ron bel\u00fcl vannak a sz\u00e1mok.<\/p>\n\n\n\n<p>Egyel\u0151re ennyi, majd \u00edrok m\u00e9g a t\u00e9m\u00e1r\u00f3l, ha b\u0151vebben belementem, de a server GC-s Core verzi\u00f3 mindenk\u00e9ppen tetszik: 630 helyett 466ms.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sok sz\u00e9pet lehet olvasni, milyen durva optimaliz\u00e1l\u00e1sok csin\u00e1ltak a .NET Core-ban. Annyira \u00e9lni akartam ezekkel, hogy a tradinghez \u00edrt backtesteremet \u00e1tportoltam Core&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,100,99,4],"tags":[],"class_list":["post-2269","post","type-post","status-publish","format-standard","hentry","category-net","category-net-5","category-net-core","category-szakmai-elet"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/2269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=2269"}],"version-history":[{"count":6,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/2269\/revisions"}],"predecessor-version":[{"id":2275,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/2269\/revisions\/2275"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=2269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=2269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=2269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}