Основная проблема заключается в том, что ваши исходные файлы были декодированы неправильно. Перекодируйте их с неправильным кодированием (вероятно, cp1252
или latin
) и правильно декодируйте как utf8
.
Например:
>>> s = u'This dog \xe2\x80\x9d \xe2\x80\x9c'
>>> s.encode('latin1').decode('utf8')
'This dog ” “'
>>> s = u'''Thx WP for performing key democratic function. Trump wants to live in post truth world where words don't matter. D\xe2\x80\xa6 |\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3\xef\xbf\xa3|\n ME LA PELAS \n DONALD TRUMP \n|\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf\xef\xbc\xbf| \n (\\__/) ||\n (\xe2\x80\xa2\xe3\x85\x85\xe2\x80\xa2) ||\n / \xe3\x80\x80 \xe3\x81\xa5'''
>>> print(s.encode('latin1').decode('utf8'))
Thx WP for performing key democratic function. Trump wants to live in post truth world where words don't matter. D… | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
ME LA PELAS
DONALD TRUMP
|__________|
(\__/) ||
(•ㅅ•) ||
/ づ
>>> s="I'm loving all the trump hate on Twitter right now \xf0\x9f\x99\x8c"
>>> s.encode('latin1').decode('utf8')
"I'm loving all the trump hate on Twitter right now
Я настроил бы трассировку в SQL Server Profiler для наблюдения, какие настройки опций НАБОРА соединение использует при соединении из кода.NET, и какие настройки используются в SSMS. Настройками опций НАБОРА я имею в виду
ARITHABORT
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
//etc
Смотрите на MSDN для таблицы опций
Я видел проблему прежде, где опции отличались (в этом случае, ARITHABORT
) и различие в производительности было огромно.
Кроме того, запрос анализатор не загружает полное содержание крупного текста или больших двоичных полей. Ваш SqlDataReader мог занять больше времени, потому что он действительно загружает полное содержание.
Я проверил бы для наблюдения, сколько времени фактическое извлечение берет.
например:
Private Sub timeCheck()
'NOTE: Assuming you have a sqlconnection object named conn
'Create stopwatch
Dim sw As New System.Diagnostics.Stopwatch
'Setup query
Dim com As New SqlClient.SqlCommand("QUERY GOES HERE", conn)
sw.Start()
'Run query
Dim dr As SqlClient.SqlDataReader = com.ExecuteReader()
sw.Stop()
'Check the time
Dim sql_query_time As String = CStr((sw.ElapsedMilliseconds / 1000)) & " seconds"
End Sub
Это позволит Вам видеть, является ли задержка в извлечении, или в казни читателя.
Если Вы, площадь, выполняющая читателя в цикле, где это много раз выполняется, то удостоверяется, что Вы используете CommandBehavior. CloseConnection
SqlCommand cmd = new SqlCommand();
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Если Вы не делаете, каждый раз, когда цикл обрабатывает строку, когда это заканчивается и rdr, и объект соединения выпадает из объема, объект соединения не будет явно закрыт, таким образом, это только станет закрытым и выпущенным назад к пулу, когда Сборщик "мусора" наконец найдет время для завершения его...
Затем если Ваш цикл будет достаточно быстр, (который вероятен), то у Вас закончатся соединения. (Пул имеет максимальный предел, который он может генерировать),
Это вызовет дополнительную задержку и задержки, поскольку код продолжает создавать дополнительные ненужные соединения, (до максимума) и ожидать GC для "нагоняния" с циклом, который использует их...
У меня была эта проблема. Отметьте параметр «арифметическое прерывание» в настройках подключения сервера БД.