LINQ and loops

by Matt 28. April 2010 09:52

Well, gosh. What a busy few months. What started as a bit of spit and polish to a website has turned into a huge rewrite and a great opportunity to learn and play with MVC(2), the Spark view engine, Lucene.net and NHibernate. But more on those some other time. Today, I’m interested in a performance problem that wasn’t what I was expecting it to be.

One core scenario of this website is that users can watch video files. We don’t want to allow them to view just anything, so we grant them access to a subset of the videos. Which means we have the following requirement: what programmes does the user have access to watch?

This is calculated like so: get the video access tokens for the user. Map each token to an episode. Strip out episodes which don’t have videos available. Retrieve the programmes for all viewable episodes.

For better or worse, this touches 5 tables across 3 separate databases.

We wrote a cache.

And you know what? It works great. The site is fast, the data is readily available, everybody is happy.

Except for one user.

We have a demo user that is granted access to a large number of episodes in a large number of programmes, ready to be used at conferences and other events.

This user killed the site.

Once the data was in the cache, everything was great. But it took 5 minutes to get into the cache. And killed the site while it was doing so.

I was expecting some trouble with this user – they didn’t work well on the existing site, and it’s obvious that we’re doing too much database activity. So I fired up the wonderful NHProf to see exactly what was going wrong and immediately proved myself wrong. All the data was being retrieved with a minimum amount of fuss and sql statements and round trips to the database. It took 5 seconds.

Now, we are definitely doing too much with the database here. We really could do with denormalising some of the data, using less databases and pulling back ids instead of unused entities. But it still only took 5 seconds. As an edge case populating a cache for a user only used by staff at conferences, 5 seconds is pretty much ok.

So what was happening for the remaining 4 minutes and 55 seconds?

The title of the post might help. The heart of this little process was a LINQ to objects query that joined up the lists from the various databases to create the final list of programmes, episodes and tokens that we could cache and present to the user. It went something like this:

var tokens = GetTokens();
var episodes = GetEpisodes(tokens);
var availableEpisodes = GetAvailableEpisodes(episodes);
from p in GetProgrammes(availableEpisodes)
select new ProgrammesWithTokens(p.Id, p.Title, GetTokensForProgramme(p, episodes, tokens))

where GetTokensForProgramme was defined like:

from t in tokens.OrderByDescending(x => x.GrantedDate)
from e in episodes
where e.OpaqueStringId == t.OpaqueStringId 
   && e.EpisodeNumber == t.EpisodeNumber 
   && p.Episodes.Contains(e)
select t

Now, there are two glaring issues going on here: We’re always ordering the tokens list – we could do that once before anything else. Similarly, we could do something about the p.Episodes.Contains(e) which isn’t going to be very quick.

But that’s small fry. Where’s the real problem?

It took me a little while to realise that what looks deceptively like nice, declarative, friendly LINQ, is in fact (of course) nested loops. Three deep. This simple bit of data collation is O(n * m * p).

I didn’t mention data size before. Turns out it’s not really that large. The demo user has about 1600 tokens, for 1500 available episodes for about 300 programmes.

Not much, actually.

But when you count the looping, this gives us 300 * 1600 * 1500 = 720,000,000 iterations.

Seven hundred and twenty MILLION iterations. That’s 720 MILLION string comparisons, and 720 MILLION list traversals for the Contains calls. It’s also 299 unnecessary ordering of the tokens list.

That’s where my 5 minutes was going.

Rewriting this as a bunch of lookups has reduced this bottleneck to essentially the time it takes to read from the database – about 5 seconds.

So the moral of the story is simple. LINQ is nice. It’s lovely. But when you’re doing multiple from statements, don’t forget it’s now doing nested loops.

That can really hurt.

Tags:

Comments (174) -

cyclerack
cyclerack
3/4/2011 9:15:25 AM #

Fair-and-square point you produce in sticklebackplastic com . Interesting to study the post and supplemental thoughts verbalised by writers on this and different websites. A post a day keeps the remarks arriving.

Reply

LAURENCE  Debora
LAURENCE Debora
5/22/2011 4:56:18 AM #

Recherche thématique sur plusieurs thèmes, c'est sukoga.com, moteur.

Reply

LAURENCE  Debora
LAURENCE Debora
5/27/2011 8:32:06 AM #

Liste d'annuaires détaillées pour faciliter le référencement, Créez votre propre article.

Reply

New york yankees Baseball cap
New york yankees Baseball cap
6/19/2011 3:06:14 PM #


I've learned a lot from your blog here,Keep on going,I will keep an eye on it,One more thing

Reply

best suv 2010
best suv 2010
7/20/2011 10:25:08 PM #

Is it ok if I quote your article in my monthly newsletter? I would think this article suits my topic perfectly. Well ya, thanks for posting this article.

Reply

free i pad
free i pad
7/23/2011 1:16:13 PM #

I wonder if he cheated on her? I remember he cheated on his previous wife with JLO so it wouldn’t be surprising.

Reply

LAURENCE  Debora
LAURENCE Debora
7/27/2011 10:47:56 AM #

Bienvenue sur annuaires-gratuit.com.Des fonctionnalités inédites, nombreuses annuaires.

Reply

DEBORA Laurence
DEBORA Laurence
8/1/2011 8:34:55 AM #

Il ne vous reste plus qu' à créer votre propre annuaire, l'inscription est  gratuite .

Reply

garage automation
garage automation
8/5/2011 9:26:47 AM #

Very Interesting. Is there any more information on the topic?

Reply

DEBORA Laurence
DEBORA Laurence
8/8/2011 10:05:33 AM #

Vous pouvez configuré vos systèmes de paiement allopas sur annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/9/2011 9:22:51 AM #

Remplissez les informations ci-dessous pour créer votre annuaire, annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/9/2011 11:23:44 AM #

Remplissez les informations ci-dessous pour créer votre annuaire, annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/9/2011 6:40:46 PM #

Recevoir la newsletter et les informations des partenaires de annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/9/2011 7:46:01 PM #

Recevoir la newsletter et les informations des partenaires de annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/9/2011 9:18:03 PM #

Recevoir la newsletter et les informations des partenaires de annuaires-gratuit.com

Reply

DEBORA Laurence
DEBORA Laurence
8/13/2011 4:20:03 AM #

Vendez aux enchères vos objets neuf.Vendre et acheter aux enchères sur sibeys.com,

Reply

DEBORA Laurence
DEBORA Laurence
8/13/2011 6:58:41 AM #

Vendez aux enchères vos objets neuf.Vendre et acheter aux enchères sur sibeys.com,

Reply

DEBORA Laurence
DEBORA Laurence
8/13/2011 10:59:20 AM #

Le système d'Enchère automatique sibeys.com, vendez aux enchères vos objets neuf.

Reply

Erought
Erought
8/29/2011 6:57:34 PM #

W. 442. An action <a href="http://www.drdreheadphones-sale.com/">dre headphones</a>had there been brought against the defendant on a covenant, <a href="http://www.drdreheadphones-sale.com/">dr dre headphones</a>that he would appear at any insurance office which the plaintiff might designate, <a href="http://www.topsunglassmall.com/">cheap oakleys</a>and answer all such questions as should be put to him with<a href="http://www.topsunglassmall.com/">ray ban sunglasses</a>regard to his health, in order that an insurance might be effected <a href="www.beatsbydrdre-headphones.com/">beats by dre</a>on his life, and would not afterwards do any act by which such insurance <a href="www.beatsbydrdre-headphones.com/">dr dre</a>should be vitiated. The declaration further averred, that the defendant <a href="www.beatsbydrdre-headphones.com/">beats by dr dre</a>had appeared and answered certain questions so put to him at the Rock <a href="http://www.ray-banlunette.com/">lunette ray ban</a>Life Insurance Company, and that the plaintiff had thereupon effected<a href="http://www.ray-banlunette.com/">ray ban aviator</a>an insurance with that Company, conditioned to be void in case the <a href="http://www.ray-banlunette.com/">ray ban wayfarer</a>defendant went beyond the limits of Europe, and then assigned as a <a href="http://www.canada-goosejakke.com/">canada goose</a>breach, that the defendant did go beyond the limits of Europe, but without any <a href="http://www.canada-goosejakke.com/">canada goose jakke</a>allegation of notice to him, either of the time and place of insurance, or of the condition <a href="http://www.canada-goosejakke.com/">canada goose jakker</a>which had thus been violated.

Reply

Wordfeud fusk och wordfeud hj&#228;lp
Wordfeud fusk och wordfeud hjälp
9/2/2011 9:02:47 AM #

Very Interesting. Is there any more information on the topic?

Reply

Andrew Cole
Andrew Cole United States
9/14/2011 3:32:13 AM #

Exceedingly educational many thanks, It looks like your subscribers would possibly want far more content similar to this continue the excellent effort.

Reply

cheat point blank
cheat point blank
10/7/2011 10:06:07 PM #

nice blog, I'll come back later, a useful post for me

Reply

Stephen
Stephen
10/17/2011 3:55:31 PM #

Thanks  for this super site.  Seems like there\\\'s always something new I learn even after being in the field for 10 years.

Reply

how to get rid of a cold sore
how to get rid of a cold sore
11/7/2011 3:04:57 PM #

Even though if McCain won, I wouldn’t really care because he’s also a pretty good president too. Anyways, GO OBAMA!!!

Reply

Gabriel Jefferson
Gabriel Jefferson United States
11/8/2011 10:25:40 PM #

Truly enlightening thanks, I reckon your trusty readers could very well want even more articles along these lines maintain the great content.

Reply

ixchel price
ixchel price
11/17/2011 10:07:23 PM #

You must take life the way it comes at you and make the best of it.-Yann Martel

Reply

Sport guy
Sport guy
11/22/2011 9:44:53 AM #

Thanks for info. Is there more info on this subject elsewhere?

Reply

Philix
Philix United States
11/22/2015 9:56:02 PM #

Great Website

Reply

Lashawn Ulwelling
Lashawn Ulwelling United States
1/15/2016 3:43:55 AM #

The dolphin saving you one is the best one!

Reply

Wilton Megeath
Wilton Megeath United States
1/15/2016 3:48:01 AM #

Let me be the first to say: Congrats, Neil! I've been following this site from day one, and have loved every single day of awesomeness that it has delivered. You deserve all the success coming your way. Keep it up!AWESOME!

Reply

Gia Agramonte
Gia Agramonte United States
1/15/2016 4:51:28 AM #

Congrats! This is such a great website, I know it will translate well into book form. Which is AWESOME!

Reply

Modesto Ziems
Modesto Ziems United States
1/15/2016 5:44:17 AM #

Congratulations, Neil! I love this site and I know I'll love the book. Christmas, birthdays, Father's Day 2010  check!

Reply

Wai Freifeld
Wai Freifeld United States
1/15/2016 7:06:43 AM #

AWESOME!Can't wait for that, will be something to want to accomplish day by day, to do something AWESOME!

Reply

Herbert Britson
Herbert Britson United States
1/15/2016 7:14:28 AM #

yeah, except the "dolphin saving you" one

Reply

Wilton Megeath
Wilton Megeath United States
1/15/2016 7:44:49 AM #

Congrats! This is such a great website, I know it will translate well into book form. Which is AWESOME!

Reply

Palmer Rinck
Palmer Rinck United States
1/15/2016 7:49:03 AM #

AWESOME!Can't wait for that, will be something to want to accomplish day by day, to do something AWESOME!

Reply

Kylee Marett
Kylee Marett United States
1/15/2016 8:32:34 AM #

the style of keeping you connected with so many things of different types is awesome and you find it interesting everytime.

Reply

Meggan Monas
Meggan Monas United States
1/15/2016 8:55:45 AM #

Thaaaat IS awesome! lol hehe

Reply

Herbert Palmerin
Herbert Palmerin United States
3/27/2016 5:56:00 AM #

I used to be very pleased to find this net-site.I wished to thanks to your time for this excellent learn!! I undoubtedly enjoying every little little bit of it and I've you bookmarked to take a look at new stuff you weblog post.

Reply

Clara Mccubbin
Clara Mccubbin United States
7/16/2016 1:08:02 PM #

an investment. Although you may have to pay for SEO services for a while, you can make all of that money back and then some once you start seeing a rise in traffic. You will need traffic to do your brick-and-mortar business, whether youÕre looking to promote it, sell things online or only make money off of advertisements.Luckily, great SEO services can provide you with additional traffic than it is possible to probably even imagine.

Reply

Anna Farris
Anna Farris United States
7/20/2016 7:43:30 AM #

Wow very thorough article. Thanks

Reply

buy trumpcoin
buy trumpcoin United States
7/20/2016 6:40:37 PM #

I really like your site design, where did you obtain it from? eitherway have  your blog readers heard about this crazy tech like bitcoin? I searched for TrumpCoin and this url came up TrumCoin.infoI think it would be a great point of discussion for your readersthanks from England! Here's a few great resources <a href="htttp://www.trumpcoin.info">trumpcoin</a>; & <a href="htttp://www.trumpcoin.com">trumpcoin llc</a>

Reply

Kathlene Fahrendorff
Kathlene Fahrendorff United States
7/20/2016 6:59:32 PM #

Thanks for the auspicious writeup. It if truth be told used to be a enjoyment account it. Look complicated to more added agreeable from you!

Reply

buy trumpcoin
buy trumpcoin United States
7/21/2016 2:41:03 PM #

I adore your blog design, wherever did you get a hold of it through? anyways have your readers heard about this weird thing similar bitcoin? I googled TrumpCoin and this site came up TrumCoin.infoI think it would be a great point of discussion for your readersCheers from England! Here's a few great resources <a href="htttp://www.trumpcoin.info">trumpcoin</a>; & <a href="htttp://www.trumpcoin.com">trumpcoin llc</a>

Reply

trumpcoin
trumpcoin United States
7/21/2016 2:44:08 PM #

I adore your blogging design, wherever did you get a hold of it from? back on track have you heard about this interesting coin similar bitcoin? I googled TrumpCoin and this site came up TrumCoin.infoI believe it would be a great point of discussion for your readersCheers from England! Here's a few great resources <a href="htttp://www.trumpcoin.info">trumpcoin</a>; & <a href="htttp://www.trumpcoin.com">trumpcoin llc</a>

Reply

Marita Canas
Marita Canas United States
7/24/2016 2:56:42 PM #

Unbelievable write-up, cheers, I will subscribe in direction of yourself RSS at the moment.

Reply

Pierre Jungen
Pierre Jungen United States
8/25/2016 4:10:24 AM #

Nice informative post. Hopefully you can also discuss some green home designs with nice architectural layouts

Reply

Domenic Zurita
Domenic Zurita United States
7/23/2018 6:46:57 AM #

Hello. impressive job. I did not anticipate this.

Reply

Damien Schettler
Damien Schettler United States
8/1/2018 7:35:05 AM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Ciera Navo
Ciera Navo United States
8/1/2018 7:35:07 AM #

With thanks! Valuable information!

Reply

Rolanda Ekstrum
Rolanda Ekstrum United States
8/1/2018 7:54:04 AM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Tia Radcliff
Tia Radcliff United States
8/1/2018 8:28:57 AM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Carter Kirscht
Carter Kirscht United States
8/1/2018 8:46:45 AM #

With thanks! Valuable information!

Reply

Mildred Stroik
Mildred Stroik United States
8/1/2018 9:29:34 AM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Basil Falgout
Basil Falgout United States
8/1/2018 11:17:48 AM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Malcom Huling
Malcom Huling United States
8/1/2018 11:58:59 AM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Randell Bugett
Randell Bugett United States
8/1/2018 12:02:17 PM #

With thanks! Valuable information!

Reply

Bethann Baseler
Bethann Baseler United States
8/1/2018 12:27:47 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Linnie Julen
Linnie Julen United States
8/1/2018 1:12:27 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Joey Morman
Joey Morman United States
8/1/2018 3:02:17 PM #

With thanks! Valuable information!

Reply

Sunshine Hiller
Sunshine Hiller United States
8/1/2018 3:02:18 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Jessie Burczyk
Jessie Burczyk United States
8/1/2018 3:08:07 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Lucretia Colby
Lucretia Colby United States
8/1/2018 3:18:14 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Arlyne Bladt
Arlyne Bladt United States
8/1/2018 3:34:23 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Jeffry Mccrimmon
Jeffry Mccrimmon United States
8/1/2018 3:45:54 PM #

With thanks! Valuable information!

Reply

Woodrow Tillett
Woodrow Tillett United States
8/1/2018 3:45:55 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Guadalupe Kanney
Guadalupe Kanney United States
8/1/2018 4:01:09 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Lesley Dimauro
Lesley Dimauro United States
8/1/2018 4:10:58 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Myles Burney
Myles Burney United States
8/1/2018 4:15:54 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Theodore Baruch
Theodore Baruch United States
8/1/2018 5:36:43 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Siu Norskog
Siu Norskog United States
8/1/2018 5:54:19 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Myrtle Cella
Myrtle Cella United States
8/1/2018 6:22:26 PM #

With thanks! Valuable information!

Reply

Rodrigo Ringlein
Rodrigo Ringlein United States
8/1/2018 7:04:38 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Phil Haskew
Phil Haskew United States
8/1/2018 7:11:39 PM #

With thanks! Valuable information!

Reply

Yvonne Urness
Yvonne Urness United States
8/1/2018 7:11:42 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Leeanna Sprafka
Leeanna Sprafka United States
8/1/2018 8:42:42 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Max Lievens
Max Lievens United States
8/1/2018 9:05:35 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Cleo Almasi
Cleo Almasi United States
8/1/2018 9:32:55 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Lanny Myerscough
Lanny Myerscough United States
8/1/2018 9:34:22 PM #

With thanks! Valuable information!

Reply

Ermelinda Firkey
Ermelinda Firkey United States
8/1/2018 9:36:05 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Carolyne Humenik
Carolyne Humenik United States
8/1/2018 10:23:04 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Carolyne Humenik
Carolyne Humenik United States
8/2/2018 12:06:03 AM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Ed Lamartina
Ed Lamartina United States
8/2/2018 1:46:53 AM #

With thanks! Valuable information!

Reply

Minh Einck
Minh Einck United States
8/9/2018 5:01:23 PM #

I have been checking out many of your stories and i can state pretty https://bzp65.com/

Reply

Roy Bissett
Roy Bissett United States
8/9/2018 5:01:25 PM #

This is a impressive story. Thanks! https://miso7700.com/

Reply

Alfonso Flakne
Alfonso Flakne United States
8/9/2018 5:57:13 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini http://bnuphoto.com

Reply

Micheal Yuill
Micheal Yuill United States
8/9/2018 6:14:34 PM #

Don’t wear seat belts lest you drown in you own urine? https://newone2017.com/

Reply

Tyler Suttles
Tyler Suttles United States
8/9/2018 6:26:15 PM #

Don’t wear seat belts lest you drown in your own urine? https://php665.com/

Reply

Roland Heaton
Roland Heaton United States
8/9/2018 8:00:25 PM #

I conceive this web site has got some real good information for everyone http://casinossir.com

Reply

Andres Mcgrory
Andres Mcgrory United States
8/11/2018 2:37:12 PM #

I have been checking out many of your stories and i can state pretty http://bambam365.com/

Reply

Jacalyn Gallob
Jacalyn Gallob United States
8/13/2018 11:15:10 PM #

It?s hard to come by knowledgeable people on this subject, however, you https://bzp65.com/

Reply

Adam Pfingsten
Adam Pfingsten United States
8/14/2018 1:50:48 PM #

With thanks! Valuable information! https://bzp65.com/

Reply

Arlene Lobosco
Arlene Lobosco United States
8/14/2018 3:34:28 PM #

s he. Breen. He's traipsing all round Dublin with a postcard someone sent him with U. p: up on it to take a li... And he doubled up. Take a what? says I. Libel action, says he, for ten thousand pounds. O hell! says I. The bloody mongrel began to growl that'd put the fear of God in you seeing somethi<br>and visit my page : 우리카지노 https://gam77.xyz/우리카지노

Reply

Porter Rienstra
Porter Rienstra United States
8/14/2018 3:59:20 PM #

m fall in love with her, make him forget the memory of the past. Then mayhap he would embrace her gently, like a real man, crushing her soft body to him, and love her, his ownest girlie, for herself alone. Refuge of sinners. Comfortress of the afflicted. Ora pro nobis. Well has it been said that whosoever prays to <br>and visit my page : 우리카지노 https://gam77.xyz/우리카지노-2

Reply

Melissia Senst
Melissia Senst United States
8/14/2018 11:39:06 PM #

Don’t wear seat belts lest you drown in your own urine? https://bzp65.com/

Reply

Mariana Cancro
Mariana Cancro United States
8/15/2018 4:49:27 AM #

Simply a smiling visitant here to share the love (:, btw outstanding design and style. "Individuals may form communities, but it is institutions alone that can create a nation." by Benjamin Disraeli.

Reply

Dane Tinnel
Dane Tinnel United States
8/15/2018 3:30:54 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini https://bzp65.com/

Reply

Carey Pauley
Carey Pauley United States
8/17/2018 8:00:42 AM #

Don’t wear seat belts lest you drown in you own urine? https://php665.com/

Reply

Mildred Stroik
Mildred Stroik United States
8/17/2018 4:03:43 PM #

I conceive this web site has got some real good information for everyone https://bzp65.com/

Reply

Milan Willenbrock
Milan Willenbrock United States
8/20/2018 12:59:19 AM #

Don’t wear seat belts lest you drown in you own urine? https://php665.com/

Reply

Mauricio Fellman
Mauricio Fellman United States
8/20/2018 4:52:15 AM #

With thanks! Valuable information! https://bzp65.com/

Reply

Edwardo Taran
Edwardo Taran United States
8/20/2018 9:36:02 AM #

Don’t wear seat belts lest you drown in you own urine? https://php665.com/

Reply

tu van xay dung nha o
tu van xay dung nha o United States
8/25/2018 2:14:30 AM #

Great post, you have pointed out some great points, I besides think this s a very great website.

Reply

Pamula Pizzini
Pamula Pizzini United States
8/29/2018 9:32:26 AM #

Don’t wear seat belts lest you drown in you own urine? https://newone2017.com/

Reply

Brice Mostafavi
Brice Mostafavi United States
8/29/2018 3:50:07 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

India Lieblong
India Lieblong United States
8/30/2018 12:47:38 PM #

Don’t wear seat belts lest you drown in your own urine? https://newone2017.com/

Reply

Augustine Degonia
Augustine Degonia United States
8/31/2018 6:47:41 AM #

With thanks! Valuable information!

Reply

Doreen Scorca
Doreen Scorca United States
9/1/2018 11:42:12 AM #

With thanks! Valuable information!

Reply

Jacque Tuccillo
Jacque Tuccillo United States
9/1/2018 11:42:24 AM #

I’m quite certain I’ll learn lots of new stuff right https://newone2017.com/

Reply

Romaine Bolon
Romaine Bolon United States
9/3/2018 5:56:09 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Kareem Beesley
Kareem Beesley United States
9/4/2018 4:39:11 PM #

I have been checking out many of your stories and i can state pretty https://newone2017.com/

Reply

Rodger Strem
Rodger Strem United States
9/5/2018 5:35:46 AM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Noah Mikola
Noah Mikola United States
9/5/2018 11:52:13 AM #

need help and money advice - go here http://n4udgsuyqgvaszza.onion

Reply

Kenneth Schmidbauer
Kenneth Schmidbauer United States
9/6/2018 12:44:07 PM #

With thanks! Valuable information!

Reply

Keturah Koeppe
Keturah Koeppe United States
9/6/2018 12:53:41 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini https://newone2017.com/

Reply

Theressa Bleier
Theressa Bleier United States
9/6/2018 3:26:57 PM #

I have got 3 already from here - http://http://n4udgsuyqgvaszza.onion

Reply

Natashia Stjulian
Natashia Stjulian United States
9/8/2018 4:55:58 PM #

With thanks! Valuable information! https://newone2017.com/

Reply

China Lakes
China Lakes United States
9/10/2018 11:51:46 AM #

With thanks! Valuable information!

Reply

Bernardo Diesi
Bernardo Diesi United States
9/10/2018 5:10:14 PM #

I’m quite certain I’ll learn lots of new stuff right https://newone2017.com/

Reply

Hettie Roff
Hettie Roff United States
9/10/2018 6:10:53 PM #

If your boyfriend is cheating - hire hackers Wild hacker crew - http://456bosfo4pgtbrv3.onion get proof. You must use TOR browser to access.Wild hacker crew

Reply

Kerri Cavins
Kerri Cavins United States
9/11/2018 1:39:15 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Pearly Stade
Pearly Stade United States
9/12/2018 11:02:13 AM #

This is a impressive story. Thanks! https://newone2017.com/

Reply

Twanda Teppo
Twanda Teppo United States
9/13/2018 9:22:44 PM #

of writing i am as well delighted to share my know-how here with colleagues. https://newone2017.com/

Reply

Kathlene Shankin
Kathlene Shankin United States
9/14/2018 10:36:08 AM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Kayla Lagana
Kayla Lagana United States
9/15/2018 1:49:11 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Paula Reyna
Paula Reyna United States
9/15/2018 7:42:47 PM #

I conceive this web site has got some real good information for everyone https://newone2017.com/

Reply

Hiram Czechowski
Hiram Czechowski United States
9/17/2018 7:22:23 AM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Major Sarra
Major Sarra United States
9/17/2018 6:20:44 PM #

This is a impressive story. Thanks! https://newone2017.com/

Reply

Dana Vanlaar
Dana Vanlaar United States
9/20/2018 3:59:19 AM #

sound like you know what you?re talking about! Thanks https://newone2017.com/

Reply

Antony Dicosmo
Antony Dicosmo United States
9/21/2018 6:15:37 AM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

cash for cars perth
cash for cars perth United States
9/21/2018 3:53:17 PM #

I  believe  you have  remarked some very interesting points ,  thankyou  for the post.

Reply

Vernie Cobarrubias
Vernie Cobarrubias United States
9/22/2018 1:22:31 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Linwood Dourado
Linwood Dourado United States
9/24/2018 8:52:59 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Noe Sirnio
Noe Sirnio United States
9/24/2018 8:53:00 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Denis Grabski
Denis Grabski United States
9/24/2018 8:59:20 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Giuseppe Louissant
Giuseppe Louissant United States
9/24/2018 9:29:17 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Arcelia Froeliger
Arcelia Froeliger United States
9/26/2018 4:53:28 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Tyson Welder
Tyson Welder United States
9/26/2018 4:54:57 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Palmer Mcmulen
Palmer Mcmulen United States
9/26/2018 5:51:11 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Russel Teece
Russel Teece United States
9/28/2018 7:33:16 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Leta Degiacomo
Leta Degiacomo United States
9/28/2018 7:33:17 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Chadwick Oehmig
Chadwick Oehmig United States
9/30/2018 5:20:51 PM #

With thanks! Valuable information!

Reply

Erin Bruney
Erin Bruney United States
9/30/2018 5:21:02 PM #

Don’t wear seat belts lest you drown in your own urine?

Reply

Micah Balmer
Micah Balmer United States
10/2/2018 2:00:17 PM #

Black on black in the Charg I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Brett Ermert
Brett Ermert United States
10/2/2018 2:00:17 PM #

With thanks! Valuable information!

Reply

Paul Zapico
Paul Zapico United States
10/2/2018 3:30:30 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Barbera Muffley
Barbera Muffley United States
10/3/2018 7:44:18 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Alonzo Cubano
Alonzo Cubano United States
10/3/2018 9:10:55 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Cindie Mandap
Cindie Mandap United States
10/4/2018 12:13:58 AM #

With thanks! Valuable information!

Reply

Gaylene Petters
Gaylene Petters United States
10/5/2018 12:08:55 PM #

No one can hack like the guys - Wild hacker crew http://456bosfo4pgtbrv3.onion - Sorry but the wild hacker crew are f**king awesome.You must use TOR browser to access.Wild hacker crew

Reply

Richard Mcinnes
Richard Mcinnes United States
10/5/2018 6:44:02 PM #

With thanks! Valuable information!

Reply

Lien Alveraz
Lien Alveraz United States
10/5/2018 6:44:02 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Hortense Meares
Hortense Meares United States
10/5/2018 8:31:37 PM #

With thanks! Valuable information!

Reply

Desmond Lunsford
Desmond Lunsford United States
10/6/2018 1:51:08 AM #

Got a Paypal transfer for over 600 USD and I only paid for 500 USD. Very professional staff took less than 15 minutes to get my money. Will be back ASAP. http://456bosfo4pgtbrv3.onion - Wild hacker crew

Reply

Troy Poplawski
Troy Poplawski United States
10/7/2018 7:41:58 AM #

I’ve been exploring for a little for any high-quality articles or blog posts on this kind of area . Exploring in Yahoo I at last stumbled upon this website. Reading this info So i am happy to convey that I've a very good uncanny feeling I discovered just what I needed. I most certainly will make certain to don’t forget this site and give it a glance regularly.

Reply

提升生意效能
提升生意效能 United States
10/7/2018 9:57:39 AM #

Reply

全面提供樓宇按揭貸款計劃及優惠,不限物業種類及樓齡,免收入証明及繁複的審查程序。 極具透明度及彈性. 24小時批核. 法例認可放債人機構.一按、二按、轉按、加按?無任歡迎 上市公司經營,信心保證,立即申請! 度身訂做借貸計劃.

Reply

Ion Magnum 是一種最新的減脂儀器,可以快速燃燒掉你身體的脂肪 , 讓你不需要做大量的體育鍛煉 , 輕鬆方便的達到專業美體的效果。 效果: 通過將你體內的脂肪轉化成肌肉,輕鬆减掉你的體重和腰圍。25分鐘的理療比健身房幾個小時的運動效果還要好! 副作用/風險: 該設備已在美國食品藥品監督管理局注册,注册分類爲醫療器械I類,I類醫療器械就是指普通人使用安全性非常好且沒有任何風險的器械。 减脂過程: 减脂板會直接固定安放於你身體的目標减肥部位,通過特殊的信號,Ion Magnum會將該部位的脂肪燃燒轉化成肌肉。(注意:該設備與你在其他沙龍中瞭解的肌肉轉化設備是完全不同的。)療程: 要想取得而保持完美的效果,一個療程需要進行10次理療,每3-7天進行一次。維持理療可以每兩周進行一次。

Reply

Michal Crocitto
Michal Crocitto United States
10/9/2018 8:09:53 PM #

With thanks! Valuable information!

Reply

Esteban Kalenak
Esteban Kalenak United States
10/9/2018 10:35:46 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

醫學美容 抗菌 cosmetic.wiki
醫學美容 抗菌 cosmetic.wiki United States
10/10/2018 8:23:54 PM #

《紅玫瑰白玫瑰》 - STYLE-TIPS.COM  給媽媽買禮物真是一件苦差。為什麼呢?像我這個年紀的人,媽媽大概都是小時候家裏窮,...      

Reply

Restylane 透明質酸
Restylane 透明質酸 United States
10/14/2018 2:54:04 PM #

青春雖然一去不返,但如果有機會,你又會唔會重新捉緊青春嘅尾巴?CLEVIEL 高濃度透明質酸 就為你打開人生新一頁,令你嘅肌膚重新充滿光澤,回復年輕彈性! 同惱人皺紋等老化現象Says Goodbye!CLEVIEL Prime  功能: 提升 ◆ 結構提升◆ 改善臉部輪廓◆ 新加入無痛配方 最佳適用範圍: ✔前額 ✔太陽穴 ✔顴骨 ✔面頰 ✔虎紋 CLEVIEL Contour+ 最佳適用範圍:✔鼻 ✔下巴 ✔虎紋

Reply

Irina Vanhorne
Irina Vanhorne United States
10/14/2018 3:55:43 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Phil Haskew
Phil Haskew United States
10/14/2018 3:55:45 PM #

Black on black in the Charger I'm creepin' Rub me the right way, you might get a genie B.o.B, black Houdini

Reply

Lamar Beuchler
Lamar Beuchler United States
10/14/2018 6:39:51 PM #

Don’t wear seat belts lest you drown in you own urine?

Reply

Vi Dufault
Vi Dufault United States
10/15/2018 7:07:10 AM #

been very happy with www.weightlostthatworks.com

Reply

Alisia Reistad
Alisia Reistad United States
10/15/2018 1:42:04 PM #

Reply

Woodrow Tillett
Woodrow Tillett United States
10/17/2018 9:20:27 AM #

With thanks! Valuable information!

Reply

Linnie Julen
Linnie Julen United States
10/17/2018 11:51:45 AM #

With thanks! Valuable information!

Reply

醫學美容 4d線 cosmetic.wiki
醫學美容 4d線 cosmetic.wiki United States
10/19/2018 4:29:44 PM #

Zephyrine 初時肌 【霜類系列】白松露修護水凝霜 White Truffle Repairing Cream的商品介紹   Zephyrine 初時肌,霜類系列,白松露修護水凝霜 White Truffle Repairing Cream       

Reply

Janel Hausmann
Janel Hausmann United States
10/21/2018 1:03:05 AM #

test

Reply

Daryl Reider
Daryl Reider United States
10/28/2018 5:06:03 PM #

I thought $300 was expensive for  party poker account but I got it and stole all that fuckers sweet money. I had cashed out before he even know what hit him.$5633 Profit Easy as pie.

Reply

Vi Dufault
Vi Dufault United States
10/29/2018 7:35:52 AM #

I got 1 million emails sent in 7 hours thanks to http://456bosfo4pgtbrv3.onion - You must use TOR browser to access.

Reply

The 30-year-old has risen to prominence after leading the German minnows into the Champions League play-off in his first season in charge last year. Hoffenheim boss Julian Nagelsmann admits 'Bayern Munich plays a big role in my dreams'

Reply

Add comment

biuquote
  • Comment
  • Preview
Loading

Rel=Me

Month List

RecentComments

Comment RSS