Канонический путь состоит в том, чтобы использовать встроенный итератор курсора.
curs.execute('select * from people')
for row in curs:
print row
<час> можно использовать fetchall()
для получения всех строк сразу.
for row in curs.fetchall():
print row
может быть удобно использовать это для создания списка Python, содержащего возвращенные значения:
curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]
Это может быть полезно для меньших наборов результатов, но может иметь плохие побочные эффекты, если набор результатов является большим.
необходимо ожидать всего набора результатов, который будет возвращен к клиентскому процессу.
можно съесть большую память в клиенте для содержания составного списка.
Это может требовать времени для Python, чтобы создать и вскрыть противоречия в списке, который Вы собираетесь сразу отбросить так или иначе.
, Если Вы знаете, существует единственная строка, возвращаемая в наборе результатов, который можно назвать fetchone()
для получения единственной строки.
curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]
<час> Наконец, можно циклично выполниться по набору результатов, выбирающему одну строку за один раз. В целом нет никакого конкретного преимущества в выполнении этого по использованию итератора.
row = curs.fetchone()
while row:
print row
row = curs.fetchone()
Версия без LINQ:
/// <summary>
/// Returns latest writen file from the specified directory.
/// If the directory does not exist or doesn't contain any file, DateTime.MinValue is returned.
/// </summary>
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param>
/// <returns></returns>
private static DateTime GetLatestWriteTimeFromFileInDirectory(DirectoryInfo directoryInfo)
{
if (directoryInfo == null || !directoryInfo.Exists)
return DateTime.MinValue;
FileInfo[] files = directoryInfo.GetFiles();
DateTime lastWrite = DateTime.MinValue;
foreach (FileInfo file in files)
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
}
}
return lastWrite;
}
/// <summary>
/// Returns file's latest writen timestamp from the specified directory.
/// If the directory does not exist or doesn't contain any file, null is returned.
/// </summary>
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param>
/// <returns></returns>
private static FileInfo GetLatestWritenFileFileInDirectory(DirectoryInfo directoryInfo)
{
if (directoryInfo == null || !directoryInfo.Exists)
return null;
FileInfo[] files = directoryInfo.GetFiles();
DateTime lastWrite = DateTime.MinValue;
FileInfo lastWritenFile = null;
foreach (FileInfo file in files)
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
lastWritenFile = file;
}
}
return lastWritenFile;
}
-121--2510014- mp3 не является бесплатным кодеком. Попробуйте вместо этого поискать Ogg, у вас будет больше шансов найти там кодек с открытым исходным кодом.
Также переводы кодеков редко выполняются в управляемом коде, потому что они требуют высокой эффективности, например, это задача с интенсивным использованием ЦП, поэтому переход к родная dll будет намного быстрее. (для разного уровня много). Если вы найдете то, что ищете, это будет медленно и, вероятно, нарушит авторское право фраунгофера. http://www.codeproject.com/KB/audio-video/MP3Compressor.aspx
Три секунды в Google не дали никаких кодировщиков ogg. Такие вещи редко встречаются в управляемом коде.
Вы уверены, что необходима чистая реализация C #? Вы можете просто обернуть lame.dll и использовать его вместо этого. Если вы записываете звук вживую, а затем транслируете его в формате mp3, эта ссылка может помочь.
Другое дело, я думаю, что MP3 - не единственный вариант для потоковой передачи. Silverlight должен поддерживать WMA, и должен быть чистый C # способ для этого.
Вот ссылка на учебный проект , который транслирует mp3-файлы.
Он еще не существует и будет медленнее, чем неуправляемый код, но вы можете попробовать преобразовать кодировщик java ogg http://downloads.xiph.org/releases/vorbis-java для уединения, подобного звуку Skype
Если вы хотите кодировать высококачественный звук музыкального уровня в Silverlight, я думаю, вам может не повезти, пока кто-нибудь не портирует кодировщик Ogg Vorbis. Но если вам просто нужно сделать голос, есть разумный перенос видеокодека Speex на чистый (Silverlight) C # под названием CSpeex, размещенный здесь . Это (в основном автоматизированный) порт C # порта Java версии кодека Speex ~ 2003, но я заставил его работать. И, конечно же, это только часть решения для потоковой передачи звука на сервер (и вниз), но это, пожалуй, самая сложная часть.
Однако никакого подавления эха в C # нет. . . пока кто-нибудь не наберется смелости и не портирует библиотеку Speex DSP на C #: -).