2013-06-07 1 views
0

У меня возникают проблемы с while циклами в C#. Это происходит, скажем, раз в неделю. Я зацикливаюсь на считывателе данных SQL Server, и я читаю простые строки, удваивает и т. Д. Я не понимаю, почему это происходит раз в то время. Если в моем коде была проблема, тогда ее производительность должна быть ВСЕГДА бедной.Visual C# очень плохая производительность во время цикла

Чтобы быть более конкретным, когда это происходит, когда я устанавливаю точку останова, поток прерывается через 3 или 4 секунды. И самое странное, что если я нажму F5, или если я «шаг за шагом» цикл, это займет меньше времени!

Это действительно странно, и это заставляет меня сходить с ума.

Мне интересно, если кто-нибудь столкнулся с этим типом сделки.

Заранее благодарим за ваши ответы!

PS: Цикл while выполнен конкретной резьбой (не основной).

PS 2: Вот мой код

reader = DBConnect.GetInstance.ExecuteReader(request.ToString(), out connection, timeOut); 

while (reader.Read()) 
{ 
    SourceInst sourceInst = new SourceInst(); 
    sourceInst.Load(reader); 
    sourceInstList.Add(sourceInst); 
} 
+6

Просьба указать код. Очень сложно помочь вам, не зная, как выглядит код. Это может быть легко переходной сетевой проблемой или занятой базой данных и т. Д. –

+2

Проблема, скорее всего, связана с вашей базой данных SQL Server, чем с кодом C#, но с информацией, которую вы опубликовали, мы можем только догадываться. – recursive

+0

Как вы знаете свой блок 'foreach', который работает медленно? Вы уверены, что ваши потоки синхронизированы? – Bedasso

ответ

2

Ваша производительность базы данных, скорее всего, изменения, таким образом, в результате чего ваши вопросы. SqlDataReader предоставляет поток в вашу базу данных и не выполняет буферизацию в памяти. Ваше предположение о том, что запрос выполняется до цикла, неверно. Поток остается открытым, и вы читаете по одной записи за раз из источника данных с помощью курсора с этим циклом. Таким образом, по мере того, как ваша производительность БД изменяется, производительность вашей петли. Он не загружает и не записывает все записи в память до цикла - вы можете сделать это, если хотите, но я не рекомендую его использовать с точки зрения использования памяти.

+2

Предполагается, что запрос выполняется до цикл "действительно неверен и настолько амбициозен :-). Спасибо за ваш ответ @DavidH. Подробнее о 'SqlDataReader' [здесь] (http://www.dotnetperls.com/sqldatareader). – Fares

+0

Рад, что я мог помочь @Fares! – Haney

Смежные вопросы