diff --git a/.changeset/clean-meals-pull.md b/.changeset/clean-meals-pull.md
new file mode 100644
index 0000000000..158c6d5269
--- /dev/null
+++ b/.changeset/clean-meals-pull.md
@@ -0,0 +1,5 @@
+---
+"effect": patch
+---
+
+Optimize Array.sortWith to avoid calling the map function excesively
diff --git a/packages/effect/src/Array.ts b/packages/effect/src/Array.ts
index 17ce3b9663..6867785277 100644
--- a/packages/effect/src/Array.ts
+++ b/packages/effect/src/Array.ts
@@ -1255,7 +1255,8 @@ export const sortWith: {
(self: Iterable, f: (a: A) => B, order: Order.Order): Array
} = dual(
3,
- (self: Iterable, f: (a: A) => B, order: Order.Order): Array => sort(self, Order.mapInput(order, f))
+ (self: Iterable, f: (a: A) => B, order: Order.Order): Array =>
+ Array.from(self).map((a) => [a, f(a)] as const).sort((a, b) => order(a[1], b[1])).map((x) => x[0])
)
/**