def METHOD_NAME(self, assets):
    """Review in a paged manner to avoid memory problem.
    Args:
        assets (Generator): A list of asset data.
    Yields:
        list: A list of violations of the paged assets.
    """
    paged_assets = []
    current_page_size = 0
    for asset in assets:
        asset_size = sys.getsizeof(asset)
        # Dictionary size is not properly reflected, cast the dictionary to
        # string instead to estimate the actual dictionary size.
        asset_size += sys.getsizeof(str(asset.resource))
        asset_size += sys.getsizeof(str(asset.iam_policy))
        if current_page_size + asset_size >= self.max_audit_size:
            violations = self.review(paged_assets)
            if violations:
                yield violations
            paged_assets = []
            current_page_size = 0
        paged_assets.append(asset)
        current_page_size += asset_size
    if paged_assets:
        violations = self.review(paged_assets)
        if violations:
            yield violations