DAO VS ADO.Net hız testi
#1
Merhaba arkadaşlar;

DAO ile Ado.Net OLEDB yi bir yarıştırayım dedim.

Wpf ile yaptım ve Framework 4 ister Wink

Sonuçlar ilginç, hem de çok ilginç. biri birine nerdeyse tam 20 kat fark atıyor.Bir hata mı var yapıyorum diye de düşünmedim değil ama direkt access üzerinde Dao ile debug.print yapsam da örnekteki süreyle nerdeyse aynı sonucu alıyorum.Aşağıya direkt Access üzerinden test yapabilmeniz için dao kodunu da vereceğim.


Not: Örnekte varsayılan olarak 10.000 kayıt üzerinden test yapılıyor ama örnekteki kayıt sayısı kutusundan bu sayıyı değiştirebilirsiniz. Tabloda toplam 100.000 kayıt vardır.

Not2: Program başlığında Dao vs OleDb yazar yanlış olmuştur. Dao vs Ado.Net olmalıydı Wink

Access üzerinden test için DAO kodu.. Module kaydedin ve F5 basın. Immediate penceresinde çıkacaktır. Immediate yoksa CTRL+G basınız.

Visual Basic
  1. Sub DAOBB()
  2. Dim db As DAO.Database
  3. Dim rst As DAO.Recordset
  4. Dim sorgum As String
  5.  
  6. Set db = CurrentDb()
  7.  
  8. sorgum = "SELECT top 10000 isim " & _
  9. "FROM Tablo1 "
  10. Set rst = db.OpenRecordset(sorgum)
  11.  
  12. Do While Not rst.EOF
  13. Debug.Print rst(0)
  14. rst.MoveNext
  15. Loop
  16.  
  17. Debug.Print "Toplam Satır: " & rst.RecordCount
  18. rst.Close
  19. Set rst = Nothing
  20.  
  21. End Sub





Projedeki Vb.Net kodlarım ise aşağıdaki gibidir.

vb.net
  1. Imports Microsoft.Office.Interop
  2. Imports dao
  3. Imports System.Data.OleDb
  4. Imports System.Data
  5.  
  6. Class MainWindow
  7.  
  8.  
  9. ' Berkant Öztürk [Access-Sql.com]
  10.  
  11.  
  12. Private Sub BtnKayitAl_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles BtnKayitAl.Click
  13.  
  14. TxtSure.Text = ""
  15. LstKayit.Items.Clear()
  16. Dim baslangic As DateTime = DateTime.Now
  17. Dim myacc As New Access.Application
  18. Try
  19.  
  20.  
  21.  
  22.  
  23. myacc.OpenCurrentDatabase(Environment.CurrentDirectory & "\beab.mdb")
  24.  
  25. Dim db As dao.Database
  26.  
  27. Dim rst As dao.Recordset
  28.  
  29. Dim sorgum As String = String.Format("SELECT Top {0} isim FROM Tablo1 ", TxtKayitSayisi.Text.Trim)
  30.  
  31.  
  32.  
  33. db = myacc.CurrentDb()
  34.  
  35.  
  36. rst = db.OpenRecordset(sorgum)
  37.  
  38. Do While Not rst.EOF
  39. LstKayit.Items.Add(rst(0).Value)
  40.  
  41. rst.MoveNext()
  42. Loop
  43.  
  44.  
  45.  
  46. rst.Close()
  47. rst = Nothing
  48.  
  49. Dim bitis As DateTime = DateTime.Now
  50.  
  51. Dim fark As TimeSpan = bitis - baslangic
  52.  
  53. TxtSure.Text = (fark.TotalMilliseconds.ToString & " milisaniye")
  54.  
  55.  
  56. Catch ex As Exception
  57. MsgBox(ex.Message.ToString)
  58.  
  59. End Try
  60. End Sub
  61.  
  62.  
  63. Public Sub Baglanalim()
  64. Dim Sorgum As String = String.Format("SELECT Top {0} isim FROM Tablo1 ", TxtKayitSayisi.Text.Trim)
  65.  
  66. Dim oleCon As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=beab.mdb")
  67.  
  68. Dim oleComd As OleDbCommand = New OleDbCommand(Sorgum, oleCon)
  69.  
  70. Dim dtst As New DataSet()
  71.  
  72. Using adpt As New OleDbDataAdapter()
  73. Try
  74. oleCon.Open()
  75. adpt.SelectCommand = oleComd
  76. adpt.Fill(dtst, "Tablo1")
  77. LstOleKayit.DataContext = dtst
  78. Catch ex As Exception
  79. MsgBox(ex.Message.ToString)
  80. Finally
  81. oleCon.Close()
  82. End Try
  83. End Using
  84.  
  85. End Sub
  86.  
  87. Private Sub BtnOleDb_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles BtnOleDb.Click
  88. TxtSureOle.Text = ""
  89. LstOleKayit.DataContext = Nothing
  90. Dim baslangic As DateTime = DateTime.Now
  91.  
  92.  
  93. Baglanalim()
  94.  
  95.  
  96. Dim bitis As DateTime = DateTime.Now
  97.  
  98. Dim fark As TimeSpan = bitis - baslangic
  99.  
  100. TxtSureOle.Text = (fark.TotalMilliseconds.ToString & " milisaniye")
  101.  
  102. End Sub
  103.  
  104.  
  105. End Class



Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#2
bence debug pencresini yavaşlığıdır vba sonucu. Zaten o pencerenin sonuç saklama oranı 2000 civarı olmalı, silip tekrar yazıyor ek süre giriyor devreye. O yüzden DAO Access ikilisini başka şekilde denemek lazım yani şöyle olabilir: Son kayda gitsin ve de bilgi versin, sonra ilk kayda gelsin ve de bilgi versin gibi. diğer ortamların sorunları dao'nun gibi görülebilir.

Diğer ortamlar için eskimiş DAO'nun Access 2010'un gömülü DAO'su için aynı derece efektif olduğunu sanmıyorum.

Koşullar değişince durum değişecek bence ama şu bilindik durum sonuç verdi: diğer orrtamlarda DAO'nun öldüğü bir geçerkti ve de Access le canlandı yeniden sadece.

İyi bir yarış olmuş. ADO.NET o akdar kaydı kısa sürede koydu iyi hız. WPF'de iyiymiş.

Şöyle bir şey denenebilir bir de: Belli özelliklerde bir kaydı bul ve süreyle birlikte göster. Bakalım hangisi önce bulacak. Tabi bu arada ayarışacak olan VBA +DAO ile ADO.net. yine ADO.NEt birinci gelirse ve kodlarda durumu değiştirecek bir bilinemzlik yoksa bu durumu ms'ye bildirip ilgili test sayfalrını güncellemeleri gerek.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#3
Bir de sanırım şöyle bir handikap olmuş. DAO ile bağlan deyince AVT'ye bağlanıyor ondan sonra kayıtlar alınıyor. AVT'ye bağlanma kodu düğmenin altından çıakrılmalı ve de düğmeyle sadece kayıtlar çekilmeli geldi bana. Belki diğeri de aynısı olaiblir ama bağlantıda DAO'lu olan AVT'yi açıyor ve bekliyor sonra alıyor. ADO.net ise disk züerinde AVT'yi açmıyor direk dalıyor içine.

Çalışma anında aynı dizinde lbl dosyası da görünüyor zaten.

Ne olursa DAO geride kalbailir ama bu durum eskimiş DAO'nun gerçek hızı değil bence. VBA altndaki durum apayrı bir incelem konusu.

ADO.Net'in güncel bağlantı yöntemleri onu ona geçiriyor. bu yüzden bence düğmeler tıklanmadan önce bağlantılar sağlanmalı ve hazır bağlantılardan kayıtları çekme yarıştırılmalı.

yine de değmeyebilir ama fikir sadece.

WPF ve ADO.NET2i görmüş olduk sayenizde. SAğolun.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#4
Aslında asıl hızı sağlayan WPF bence aynı testi Winformla yapsaydık bu hızda alamazdık Ado.net ile.
100.000 kaydı bile 1,4 saniye de getiriyor. (pc ye göre değişiklik gösterebilir)

Mehmet Bey, belki de en iyisi dao yu direkt Access üzerinde diğerini de Wpf de test etmek yani aynı platformda değil ama aynı vt (Access) olsun. Bence siz Access için bir şey yaptırın ben de wpf de yapayım öyle karşılaştıralım. Sıralama yaptırma, yürüyen bakiye ya da sizin aklınıza gelen bir olay Wink Amacımız birini yüceltip birini yermek değil tabii. Zaten kıyaslanacak teknolojiler de değiller. Bizim amacımız keyif almak ve yol göstermek..
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#5
denedikçe öğreniyoru ve bu bilgiler kulaktan duyma olmuyor, edinilmiş tecrübeler oluyor.

Forumseverler de bunları okuduklarındna bence çok şanslılar.

Ben de şimdi bunu yazacaktım. Ortada Access programının immaeidate pencresi ile WPF'nin formnun yarışı da var.

WPF'nin kullandığı ACEDAO.DLL mi? C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE14\\ACEDAO.dll>

Siz yürüyen bakiyenin nasıl oalcağını veriniz onu yaptırayım istediğiniz tabloda. Sonra aynı tabloda SıralaME kodunu yaptırayım. Siz de aynısını WPF ile yaptırın tammadır: Konuyu bitirelim Cute

İnandığınız bir geliştiricinin peşinden gitmek zevkli bir iştir. Aynı güveni ben de nasıl oluyorsa bu ara Access'e duyuyorum farklı amaçlarla. Bol WPF'li günler.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#6
Referanslara com içinden Microsoft Access xxx object library ekledikten sonra ado, dao yu GAC içinden kendi ekliyor.

Örneğin DAO'nun pathi;

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Access.Dao\14.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Access.Dao.dll



Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Gelir Testi Hesaplama akd27 5 694 17-09-2023, 22:31
Son Mesaj: akd27
  Kişilik Testi dreamt 7 5.095 26-04-2014, 09:09
Son Mesaj: YILMAZZZ
access-sql-2 GENEL KÜLTÜR TESTİ gitarisyen 9 5.898 14-12-2011, 10:14
Son Mesaj: d_rago_n

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi