Vec<Animal>
не является законным, но компилятор не может вам сказать, потому что несоответствие типа каким-то образом скрывает его. Если мы удалим вызовы на push
, компилятор даст нам следующую ошибку:
<anon>:22:9: 22:40 error: instantiating a type parameter with an incompatible type `Animal`, which does not fulfill `Sized` [E0144]
<anon>:22 let mut v: Vec<Animal> = Vec::new();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Причина, по которой это не является законным, заключается в том, что Vec<T>
хранит много T
объектов последовательно в памяти. Тем не менее, Animal
является признаком, а черты не имеют размера (а Cat
и Dog
не имеют одинакового размера).
Чтобы решить эту проблему, нам нужно сохранить то, что имеет размер в Vec
. Наиболее простым решением является обертывание значений в Box
, то есть Vec<Box<Animal>>
. Box<T>
имеет фиксированный размер («указатель жира», если T - это признак, простой указатель в противном случае).
Вот работа main
:
fn main () {
let dog: Dog = Dog;
let cat: Cat = Cat;
let mut v: Vec<Box<Animal>> = Vec::new();
v.push(Box::new(cat));
v.push(Box::new(dog));
for animal in v.iter() {
println!("{}", animal.make_sound());
}
}
Наш QA имел некоторые соединения Excel, которые возвратили большие наборы результатов, те запросы приостанавливались с WaitType ASYNC_NETWORK_IO в течение некоторого времени. В это время все другие запросы испытали таймаут, так, чтобы определенная вставка не имела никакого отношения к нему.
Я думаю, что Ваш наиболее вероятный преступник является блокирующейся блокировкой от другой транзакции (или возможно от триггера или чего-то еще негласно).
самый легкий способ сказать состоит в том, чтобы начаться эти INSERT
, и в то время как он подвешивается, работайте EXEC SP_WHO2
в другом окне на том же сервере. Это перечислит все текущее действие базы данных и имеет столбец, названный BLK
, который покажет Вам, если какие-либо процессы будут в настоящее время блокироваться. Проверьте SPID
из Вашего подвешенного соединения, чтобы видеть, имеет ли оно что-нибудь в BLK
столбец, и если оно делает, это - процесс, это блокирует Вас.
, Даже если Вы не думаете, существует любое другое выполнение операторов, единственный способ знать наверняка состоит в том, чтобы перечислить текущие транзакции с помощью SP как этот.
Мог быть то, что таблица занимает много времени для роста.
, Если у Вас есть настольный приемник, чтобы вырасти большой суммой и не включить мгновенную инициализацию файла, затем запрос мог, конечно, тайм-аут время от времени.
Проверяют эту путаницу: MSDN
никакие другие операторы, работающие на той таблице в то время.
Что относительно операторов, работающих против других таблиц как часть транзакции? Это могло уехать, соединяет проблемную таблицу.
Также проверка на рост файла журнала или файла данных, происходящий в то время при выполнении SQL2005, он показал бы в журналах ошибки SQL.
взгляд на фрагментацию таблицы, Вы могли получать расщепления страницы из-за этого