Teams often gets tagged as a performance hog, with people pointing to the huge amount of memory the desktop client grabs on Windows and the constant ticking over of CPU cycles when the client seems to be inactive. Like many assertions, there’s a mixture of truth and fiction mixed in here.
Teams is built on the Electron platform. Some hold that this is the foundation of Teams demanding so much memory because of the need to load so many libraries. It’s true that the decision to use Electron as the development platform incurs some cost. But any platform brings some penalty, and the upside of using Electron is that Teams gets a client that works in much the same way on Windows, Mac, Linux, and browsers.
Chromium Memory Management
Chromium is part of Electron. It’s used by Teams for rendering the user interface and text. As Teams is an intensely graphical application, a lot of rendering happens, and memory is consumed. An interesting Microsoft article explains how the Chromium memory model works for Teams. Essentially, if a workstation has free memory, Teams will take some of that memory to cache data and keep structures in memory instead of going to disk. As demand grows from other applications, Teams releases memory. It’s therefore an expected condition to see the Teams processes occupy a lot of memory, even when apparently idle.
Tracking Memory Usage
Microsoft’s article says that because the desktop and browser clients share the Chromium memory management model, much the same memory usage profile is seen. I tested this assertion and found that it’s true. Figure 1 shows the Windows Task Manager report that the browser client loaded into Edge Chromium takes up 775 MB while the processes which compose the Teams desktop client need 887 MB. The Outlook desktop client, another application often criticized for its size, looks svelte in comparison.
Figure 1: Teams and its processes use quite a lot of memory
In both cases, the data was after a sustained period of activity. Memory usage grows and declines as Teams features are accessed. For instance, loading a recording of a live event into the browser rapidly grew usage past 1 GB. Switching tenants, moving between apps (including the basic apps like the Activity feed, Files, and Calendar), and accessing chats and channel conversations all cause a demand for memory. Meetings are the most demanding app in terms of consumption due to the need to process audio and video feeds. The lowest reported memory I have seen over several days of monitoring was circa 250 MB. Your mileage might vary depending on how you use Teams and the configuration (hardware and software) of your PC.
Memory Better Than Disk
Using 1 GB of memory, even on a 16 GB Surface Book 2, seems an awful lot for a single application. But using available memory to cache and manipulate data usually results in better performance, especially if an application can avoid reading data from disk. Even the fastest SSD is much slower than memory.
Of course, memory is not the only thing to consider when looking at an application’s performance. Teams has had its challenges in other areas, notably when rendering video or using a high-definition external monitor. When I plug my PC into a HP Envy 34 inch monitor at 1080p, memory usage increases slightly for both Teams and browsers; scaling up to drive a 4K monitor demands more memory and GPU cycles.
Keep Applying Updates
Keeping performance within acceptable limits is always likely to be a challenge, especially when the application functionality changes often, which is the case with Teams. For instance, we’ve yet to see how the new 7 x 7 large gallery view and the Together mode for meetings perform across a variety of workstations. Maintaining acceptable performance is one of the reasons why Teams updates its clients so often and why it’s important to make sure that client workstations get those updates. It’s also important to apply Windows and driver updates to workstations.
Keeping the good news until last, memory usage by Teams and other Chromium-based applications dropped on my PC after applying a number of recent changes, including the 2020-07 cumulative updates for the .NET framework and Windows 10 1909 and an upgrade to version 84 of Chromium. Teams was also upgraded to Version 1.3.00.19565. Initially I thought that an impressive drop had occurred when I saw Teams using 306 MB (Figure 2), even after switching between tenants, posting some messages, and attending a meeting.
Figure 2: A drop in Teams memory usage after some updates
Memory usage tends to grow over time and Teams is no exception. The 306 MB grew to about 750 MB as the day progressed and different events occurred, including frequent tenant switches and peak usage topped 1.2 GB after the PC resumed from hibernation and Teams restored itself (and probably checked the six tenants I connect to – perhaps due to cache synchronization). However, in normal use, memory usage never went higher than 800 MB and normally hovers around 625 MB. That’s still hefty, but less than before.
I’m not quite sure which update had most effect, but I’m thankful that the Teams performance profile shows some signs of improvement. Again, your mileage might vary depending on the work you do and the number of tenants you connect to.
Need more information about how Teams really works? Check out the Office 365 for IT Pros eBook and the detail included there.
I like how you include the Brave Browser in all your screenshots without even mentioning it once, probably with 27 tabs opened, to have at least ONE app in your screenshots that consumes more RAM than all the Microsoft apps. 🙂
(Brave really is an excellent privacy-focused browser with very good ad filtering, btw. I use it all the time on mobile)
July 22, 2020 obviously was a heavy day of Brave usage. I now mostly use Edge… right now, it’s at 1,883 MB and Teams is at 759. The ups and downs of everyday browsing.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
I like how you include the Brave Browser in all your screenshots without even mentioning it once, probably with 27 tabs opened, to have at least ONE app in your screenshots that consumes more RAM than all the Microsoft apps. 🙂
(Brave really is an excellent privacy-focused browser with very good ad filtering, btw. I use it all the time on mobile)
July 22, 2020 obviously was a heavy day of Brave usage. I now mostly use Edge… right now, it’s at 1,883 MB and Teams is at 759. The ups and downs of everyday browsing.