2010-05-24 6 views
2

J'utilise SQL Server CE 3.5 SP1 dans l'une de mes applications client. Lorsqu'un utilisateur charge le programme et commence à l'utiliser, les performances sont bonnes. Si l'utilisateur laisse le programme inactif pendant un certain temps, cela prend beaucoup de temps (10 secondes ou plus) pour que le programme réponde. Chaque fois que l'utilisateur demande un nouvel écran, un appel est effectué dans la base de données SQL CE pour obtenir les données de cet écran. Il semble que le disque dur puisse se mettre en veille, puis lorsque la base de données est accessible, le disque dur doit se réveiller. Est-il possible de charger la base de données entière en mémoire et de travailler à partir de cela? Y a-t-il d'autres suggestions sur la façon d'augmenter les performances?Performances de SQL Server Compact Edition 3.5

+1

Je dirais que ce que vous avez n'est rien de plus qu'une intuition; Avant de faire de grands efforts, je m'assurerais que vous avez bien compris la cause du problème. – overslacked

Répondre

1

Je doute beaucoup que le problème soit SqlCE. C'est une base de données très rapide. En cours. De plus, j'ai chargé des centaines de milliers d'enregistrements et j'obtiens la même performance si j'utilisais SQL Express.

Pouvez-vous charger la base de données entière? Bien sûr, c'est ce que ADO.NET est pour. Ne fais pas ça.

Je suppose que vous avez d'autres problèmes. Par exemple, prétraitez-vous les données avant de charger le formulaire, par exemple en définissant des relations d'ensemble de données, des colonnes d'expression ajoutées aux tables de données, etc. Il est également possible que l'ordinateur de l'utilisateur ne dispose pas de suffisamment de mémoire et que vous rencontriez des problèmes de page Windows. Ce que vous pensez que SqlCe accède à la base de données, c'est probablement que Windows renvoie votre application en mémoire après avoir été écrite dans le fichier d'échange.

+0

J'ai posté cette question trop rapidement avant de faire plus de recherche (honte à moi). Vous avez raison. Je charge des centaines d'enregistrements pour quelques vues différentes et il semble que ce soit la pagination de Windows qui cause le problème de performance. – awilinsk

0

Assurez-vous de garder une connexion à la base de données ouverte pendant la durée de votre application. L'ouverture d'une SqlCeConnection est une opération coûteuse.

+0

Ce n'est pas dix secondes cher. – AMissico

+0

Eh bien, j'ai rencontré un problème de performance en utilisant SqlServerCE comme base de données de cache dans l'application de service Windows. J'ai utilisé profiler pour déterminer la cause de la pénalité de performance. Et j'ai trouvé que la fermeture de la connexion SqlServerCe était la cause. L'ouverture de la connexion prend du temps, mais la fermeture de la connexion prend environ 8 fois plus de temps! Voici à propos de la performance: http://stackoverflow.com/questions/386223/sqlce-connections-keep-them-open-or-let-them-close. –

Questions connexes