diff --git a/.jules/bolt.md b/.jules/bolt.md index 341c7c91..4c84e31d 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -67,3 +67,6 @@ ## 2025-02-12 - [Fast Path Execution in Directory Traversal and Log Parsing] **Learning:** Checking for string existence (`if "silence_" not in stderr`) before invoking regex matchers provides significant speed improvements when parsing large blocks of text. Similarly, moving expensive I/O operations like `os.path.realpath` inside conditional blocks prevents redundant disk access when configuration (like path exclusions) isn't utilized. **Action:** When working on large text processing or disk operations, verify if early exit conditions or conditional execution can bypass the expensive system or library calls. +## 2024-10-11 - Optimize set intersection in TranscriptIndex +**Learning:** In Python, when iteratively intersecting sets within a loop, using the `.intersection_update()` method modifies the set in-place, avoiding intermediate memory allocations compared to the `&` operator. +**Action:** Use `.intersection_update()` for set intersections in hot loops. diff --git a/transcript_search.py b/transcript_search.py index 1660c1f2..36f493df 100644 --- a/transcript_search.py +++ b/transcript_search.py @@ -241,9 +241,11 @@ def search(self, query: str) -> list[Match]: postings = self._postings.get(term) if not postings: return [] - candidates = ( - set(postings) if candidates is None else candidates & postings - ) + if candidates is None: + candidates = set(postings) + else: + # ⚡ Bolt: in-place 교집합 연산으로 중간 세트 메모리 할당 방지 + candidates.intersection_update(postings) if not candidates: return []