diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index ceaaa58cf6e591cc581d7ac71b09ae27d9a5d618..e2730f4d5fb0e0e4fa6d11521f803668dfe24fc5 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -24,25 +24,24 @@
 
 namespace OC\Share20;
 
+use OC\Cache\CappedMemoryCache;
 use OC\Files\Mount\MoveableMount;
+use OCP\Files\File;
+use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
 use OCP\Files\NotFoundException;
-use OCP\IUserManager;
-use OCP\Share\IManager;
-use OCP\Share\IProviderFactory;
-use OC\Share20\Exception\BackendError;
 use OCP\IConfig;
+use OCP\IGroupManager;
 use OCP\IL10N;
 use OCP\ILogger;
-use OCP\Security\ISecureRandom;
+use OCP\IUserManager;
 use OCP\Security\IHasher;
-use OCP\Files\Mount\IMountManager;
-use OCP\IGroupManager;
-use OCP\Files\File;
-use OCP\Files\Folder;
-
-use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Security\ISecureRandom;
 use OCP\Share\Exceptions\GenericShareException;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Share\IManager;
+use OCP\Share\IProviderFactory;
 
 /**
  * This class is the communication hub for all sharing related operations.
@@ -69,6 +68,9 @@ class Manager implements IManager {
 	private $userManager;
 	/** @var IRootFolder */
 	private $rootFolder;
+	/** @var CappedMemoryCache */
+	private $sharingDisabledForUsersCache;
+
 
 	/**
 	 * Manager constructor.
@@ -106,6 +108,7 @@ class Manager implements IManager {
 		$this->factory = $factory;
 		$this->userManager = $userManager;
 		$this->rootFolder = $rootFolder;
+		$this->sharingDisabledForUsersCache = new CappedMemoryCache();
 	}
 
 	/**
@@ -1209,6 +1212,14 @@ class Manager implements IManager {
 	 * @return bool
 	 */
 	public function sharingDisabledForUser($userId) {
+		if ($userId === null) {
+			return false;
+		}
+
+		if (isset($this->sharingDisabledForUsersCache[$userId])) {
+			return $this->sharingDisabledForUsersCache[$userId];
+		}
+
 		if ($this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes') {
 			$groupsList = $this->config->getAppValue('core', 'shareapi_exclude_groups_list', '');
 			$excludedGroups = json_decode($groupsList);
@@ -1224,10 +1235,13 @@ class Manager implements IManager {
 				// if the user is only in groups which are disabled for sharing then
 				// sharing is also disabled for the user
 				if (empty($remainingGroups)) {
+					$this->sharingDisabledForUsersCache[$userId] = true;
 					return true;
 				}
 			}
 		}
+
+		$this->sharingDisabledForUsersCache[$userId] = false;
 		return false;
 	}
 
diff --git a/lib/public/Util.php b/lib/public/Util.php
index eb573168e10a489a85502dc11e51b2377f026d31..687f4e78f69c281b56e5fa6508ef5506ef55d95b 100644
--- a/lib/public/Util.php
+++ b/lib/public/Util.php
@@ -63,6 +63,9 @@ class Util {
 	const ERROR=3;
 	const FATAL=4;
 
+	/** \OCP\Share\IManager */
+	private static $shareManager;
+
 	/**
 	 * get the current installed version of ownCloud
 	 * @return array
@@ -171,13 +174,19 @@ class Util {
 	 *
 	 * @return boolean
 	 * @since 7.0.0
+	 * @deprecated 9.1.0 Use \OC::$server->getShareManager()->sharingDisabledForUser
 	 */
 	public static function isSharingDisabledForUser() {
-		return \OC_Util::isSharingDisabledForUser(
-				\OC::$server->getConfig(),
-				\OC::$server->getGroupManager(),
-				\OC::$server->getUserSession()->getUser()
-		);
+		if (self::$shareManager === null) {
+			self::$shareManager = \OC::$server->getShareManager();
+		}
+
+		$user = \OC::$server->getUserSession()->getUser();
+		if ($user !== null) {
+			$user = $user->getUID();
+		}
+
+		return self::$shareManager->sharingDisabledForUser($user);
 	}
 
 	/**
diff --git a/tests/lib/Files/ViewTest.php b/tests/lib/Files/ViewTest.php
index 59b17b839584ed91594725ec973689b91543a18f..87feb63888d0da1b12b82a8ba5d2830cfd6b5d96 100644
--- a/tests/lib/Files/ViewTest.php
+++ b/tests/lib/Files/ViewTest.php
@@ -7,6 +7,7 @@
 
 namespace Test\Files;
 
+use OC\Cache\CappedMemoryCache;
 use OC\Files\Cache\Watcher;
 use OC\Files\Storage\Common;
 use OC\Files\Mount\MountPoint;
@@ -269,6 +270,9 @@ class ViewTest extends \Test\TestCase {
 	 * @dataProvider sharingDisabledPermissionProvider
 	 */
 	public function testRemoveSharePermissionWhenSharingDisabledForUser($excludeGroups, $excludeGroupsList, $expectedShareable) {
+		// Reset sharing disabled for users cache
+		$this->invokePrivate(\OC::$server->getShareManager(), 'sharingDisabledForUsersCache', [new CappedMemoryCache()]);
+
 		$appConfig = \OC::$server->getAppConfig();
 		$oldExcludeGroupsFlag = $appConfig->getValue('core', 'shareapi_exclude_groups', 'no');
 		$oldExcludeGroupsList = $appConfig->getValue('core', 'shareapi_exclude_groups_list', '');
@@ -290,6 +294,9 @@ class ViewTest extends \Test\TestCase {
 
 		$appConfig->setValue('core', 'shareapi_exclude_groups', $oldExcludeGroupsFlag);
 		$appConfig->setValue('core', 'shareapi_exclude_groups_list', $oldExcludeGroupsList);
+
+		// Reset sharing disabled for users cache
+		$this->invokePrivate(\OC::$server->getShareManager(), 'sharingDisabledForUsersCache', [new CappedMemoryCache()]);
 	}
 
 	public function testCacheIncompleteFolder() {