Медленная работа SqlDataReader

Основная проблема заключается в том, что ваши исходные файлы были декодированы неправильно. Перекодируйте их с неправильным кодированием (вероятно, 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          
11
задан Samuel Liew 5 April 2018 в 12:20
поделиться

5 ответов

Я настроил бы трассировку в SQL Server Profiler для наблюдения, какие настройки опций НАБОРА соединение использует при соединении из кода.NET, и какие настройки используются в SSMS. Настройками опций НАБОРА я имею в виду

ARITHABORT
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
//etc

Смотрите на MSDN для таблицы опций

Я видел проблему прежде, где опции отличались (в этом случае, ARITHABORT) и различие в производительности было огромно.

5
ответ дан 3 December 2019 в 10:05
поделиться

Кроме того, запрос анализатор не загружает полное содержание крупного текста или больших двоичных полей. Ваш SqlDataReader мог занять больше времени, потому что он действительно загружает полное содержание.

1
ответ дан 3 December 2019 в 10:05
поделиться

Я проверил бы для наблюдения, сколько времени фактическое извлечение берет.

например:

  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

Это позволит Вам видеть, является ли задержка в извлечении, или в казни читателя.

0
ответ дан 3 December 2019 в 10:05
поделиться

Если Вы, площадь, выполняющая читателя в цикле, где это много раз выполняется, то удостоверяется, что Вы используете CommandBehavior. CloseConnection

    SqlCommand cmd = new SqlCommand();
    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)

Если Вы не делаете, каждый раз, когда цикл обрабатывает строку, когда это заканчивается и rdr, и объект соединения выпадает из объема, объект соединения не будет явно закрыт, таким образом, это только станет закрытым и выпущенным назад к пулу, когда Сборщик "мусора" наконец найдет время для завершения его...

Затем если Ваш цикл будет достаточно быстр, (который вероятен), то у Вас закончатся соединения. (Пул имеет максимальный предел, который он может генерировать),

Это вызовет дополнительную задержку и задержки, поскольку код продолжает создавать дополнительные ненужные соединения, (до максимума) и ожидать GC для "нагоняния" с циклом, который использует их...

0
ответ дан 3 December 2019 в 10:05
поделиться

У меня была эта проблема. Отметьте параметр «арифметическое прерывание» в настройках подключения сервера БД.

4
ответ дан 3 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: