현재 위치: > 최신 기사 목록> 생성기를 사용하여 STR_SPLIT를 대체하여 메모리 효율성을 향상시킵니다

생성기를 사용하여 STR_SPLIT를 대체하여 메모리 효율성을 향상시킵니다

M66 2025-05-27

PHP에서 STR_SPLIT 함수는 종종 문자열을 여러 하위 문자 (배열)로 분할하는 데 사용됩니다. 그러나 더 큰 문자열의 경우 STR_SPLIT는 모든 분할 하위 문자열을 한 번에 메모리에로드하여 메모리 발자국이 더 높아질 수 있습니다. 메모리 효율을 향상시키기 위해 발전기를 사용 하여이 프로세스를 최적화 할 수 있습니다.

1. 발전기 란 무엇입니까?

Generator는 PHP의 가벼운 반복자로 값을 하나씩 생성하고 필요할 때 다음 항목을 계산할 수 있습니다. 생성기는 모든 값을 메모리에 저장하지 않지만 메모리 사용량을 크게 줄일 수 있기 때문에 모든 값을 메모리에 저장하지 않기 때문에 일반 배열에 비해 명확한 이점이 있습니다.

2. str_split 사용의 결함

str_split 함수는 문자열을 지정된 길이의 다중 하위 문자로 나누고 배열을 반환합니다. 예를 들어:

 $string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);

출력 결과 :

 Array
(
    [0] => Hel
    [1] => lo,
    [2] =>  Wo
    [3] => rld
    [4] => !
)

코드는 간단하고 효과가 직관적이지만 큰 문자열을 다룰 때 STR_SPLIT는 한 번에 메모리에 모든 하위 문자열을 저장하므로 특히 데이터 양이 매우 큰 경우 메모리 소비가 과도한 메모리 소비를 유발할 수 있습니다.

3. 생성기를 사용하여 메모리 효율을 최적화하십시오

모든 하위 문자열을 한 번에 메모리에 저장하는 대신 생성기를 통해 분할 된 문자열을 하나씩 생성 할 수 있습니다. 이것은 수율 키워드를 통해 달성 할 수 있습니다. 생성기는 필요한 경우에만 결과를 반환 할 수 있으며, 이는 모든 데이터를 메모리에 한 번에로드하지 않도록합니다.

다음은 생성기를 사용하여 str_split을 최적화하는 예입니다.

 function split_string_generator($string, $length = 1) {
    $strLength = strlen($string);
    for ($i = 0; $i < $strLength; $i += $length) {
        yield substr($string, $i, $length);
    }
}

$string = "Hello, World!";
$generator = split_string_generator($string, 3);

foreach ($generator as $chunk) {
    echo $chunk . PHP_EOL;
}

이 예에서는 지정된 길이로 문자열을 분할하는 split_string_generator 라는 발전기 함수를 정의합니다. Foreach Loops를 사용하면 발전기는 각 하위 문자열을 하나씩 반환하고 모든 하위 문자열을 한 번에 메모리에 저장하지 않습니다.

출력 결과는 다음과 같습니다.

 Hel
lo,
 Wo
rld
!

4. 발전기가 더 많은 메모리를 저장하는 이유는 무엇입니까?

발전기의 가장 큰 장점은 게으른 하중입니다. 모든 데이터를 한 번에 메모리에로드하는 str_split 과 달리 생성기는 필요할 때마다 다음 값 만 계산하므로 너무 많은 메모리를 취하지 않고도 매우 큰 문자열을 처리 할 수 ​​있습니다. 거대한 데이터 세트의 경우 생성기는보다 효율적인 데이터를 처리하고 반복하는 방법을 제공합니다.

5. 해당 시나리오

생성기는 특히 데이터가 항목으로 처리 해야하는 시나리오에 특히 적합합니다.

  • 큰 파일 내용 (예 : 로그 파일, 텍스트 파일 등)을 처리하십시오.

  • 데이터베이스에서 많은 양의 데이터를 추출 할 때 전체 데이터 세트를 한 번에로드하지 마십시오.

  • 특히 데이터 양을 예측할 수없는 경우 스트리밍 데이터 처리를 구현하십시오.

6. 요약

생성기를 사용하면 STR_SPLIT 기능의 메모리 효율을 최적화 할 수 있습니다. 특히 빅 데이터를 처리 할 때 생성기의 게으른로드 특성은 메모리 소비를 크게 줄일 수 있습니다. 모든 데이터를 메모리에 한 번에로드하는 대신 생성기는 필요에 따라 값을 생성하여 프로그램이 데이터를보다 효율적으로 처리 할 수 ​​있도록합니다.

이러한 방식으로, 큰 문자열조차도 더 메모리 친화적 인 방식으로 세그먼트 화되고 처리 될 수 있으므로 응용 프로그램 성능을 향상시킬 수 있습니다.