문자열 색칠의 시간은 얼마나 많은 다른 NSColors가 사용되는지에 달려 있음을 발견했습니다. 아래의 코드에서 세 가지 경우에만 하나의 색상을 사용하면 텍스트 채색 프로세스는이 세 가지 경우에 각각 다른 색상, 각 색상의 각 색상을 사용하는 경우보다 3 배 빠릅니다. 왜 ? 세 가지 색상의 색상을 느리게하지 않는 방법이 있습니까? 내가 한 번 더 나쁜 것을 발견했다 프로세스를 느리게하지 않고 텍스트 채색에 색을 사용하는 방법은 무엇입니까?
for i in 0..<arrayOfNSRangesForA.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForA[i])
}
for i in 0..<arrayOfNSRangesForT.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForT[i])
}
for i in 0..<arrayOfNSRangesForC.count
{
textFromStorage.addAttribute(NSForegroundColorAttributeName, value: NSColor.green, range: arrayOfNSRangesForC[i])
}
업데이트. 색을 NSForegroundColorAttributeName
에서 NSBackgroundColorAttributeName
으로 바꾼 경우 실행 시간이 크게 늘어났습니다 (10 번). 20,000 자의 경우, NSForegroundColorAttributeName
- 1 초, NSBackgroundColorAttributeName
- 10 초 동안 1 색이었습니다. 3 색이면 3 초 ~ 30 초. 나를 위해 그것은 Swift의 매우 나쁜 특징이다! !! DNA의 길이가 A, T, G, C 문자의 수천이기 때문에 DNA (ATGC 시퀀스) 채색으로 정상적인 작업을 수행 할 수 없습니다!
업데이트 의견에서 나는 보이는 부분 만 색칠을 제안합니다. 나는이 방법을 시도해 보았고, 표준적인 방법으로했던 것과 비교해 짧은 텍스트라도 훨씬 더 나쁘다. 그래서, 텍스트의 보이는 부분에 대해 텍스트의 NSRange를 가지며, 스크롤이 켜져있을 때 알림을 사용하여 스크롤하는 동안 파리에서 색칠했습니다. 그것은 나쁜 방법입니다.
색상이 적용되는 특정 범위에 따라 동일한 속성의 실행이 하나가 될 수 있습니다. 또는 차이 색상을 사용할 때보 다 실행 횟수가 적습니다. 각 작업에 대한 오버 헤드가있는 실행마다 별도의 그리기 작업이 있습니다. 'enumerateAttributes (in : options : using :) '을 사용하여 각각의 경우에 얼마나 많은 실행이 있는지 확인할 수 있습니다. –
@Ken Thomases 필자는 A, G, T 및 C 문자가 서로 다른 양으로 구성된 약 180,000 자의 문자열을 테스트했지만 실제로는 DNA 시퀀스입니다. 먼저 각 A, G, T 및 C의 범위를 결정합니다. 따라서 범위가 4 개 배열 된 다음 A, G, T 및 C 문자에 색상을 지정합니다. – VYT
@Ken Thomases는 각 C, G, A 및 T의 배열이 동일하기 때문에 하나의 색상 또는 3 개의 색상에 대해 범위의 병합은 채색 과정에서만 발생할 수 있으며, 각 루프마다 다른 루프에 의존 ?? – VYT