Одной из первых оптимизаций было бы фактически break
, как только вы нашли одно совпадение:
key_words = [ "one", "two", "three"]
log_lines = os.popen("logcat");
for log_line in log_lines:
for keyword in key_words:
if keyword in log_line:
print log_line
break # stop looking for keywords if you already found one
Более читабельное решение - заменить проверку цикла ключевого слова регулярным выражением. Если есть совпадение, выведите строку:
import re
key_words = [ "one", "two", "three"]
regex = re.compile('|'.join(key_words)) # one|two|three
log_lines = os.popen("logcat");
for log_line in log_lines:
if regex.match(log_line): # returns None if no match, an object if there is a match
print log_line
С точки зрения производительности, не уверен, что будет быстрее, но один будет более читабельным. Однако в результатах есть некоторые оговорки.
Этот MSDN должен помочь Вам. Межстрочный интервал является результатом Шрифта, который Вы используете. Вы, возможно, должны разбить свои команды DrawString во множественные вызовы при необходимости в пользовательском межстрочном интервале.
Эта регистрация форума Microsoft может быть полезной:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1507414&SiteID=1
Это показывает, как MeasureString может использоваться для определения, сколько из текста будет соответствовать на каждой строке, затем с помощью этого для прогрессивного рендеринга содержания всего прямоугольника линию за линией. К сожалению, я не думаю, что существует встроенное свойство межстрочного интервала, таким образом, необходимо будет пойти для ручного подхода. Автор сообщения использует Высоту шрифта * 1.5.
Также стоит исследовать StringFormatFlags - необходимо будет удостовериться, что и вызовы DrawString и MeasureString используют тот же StringFormat, таким образом, рендеринг и измерение последовательны:
http://msdn.microsoft.com/en-us/library/system.drawing.stringformatflags.aspx