Le 2011-12-21 à 15:17, Joshua Ballanco a écrit :

> 2011/12/20 François Boone <francois.bo...@usherbrooke.ca>
> Hi,
> 
> I have written a function with 461 queries in a MySQL database.
> With macirb, it takes more or less 1s for all queries.
> I put my file in a Xcode project and when I click on a button, the action is 
> to run this function.
> However, it takes more or less 1s for EACH query!
> I use normal schedule, not deployment as explained in the definitive guide,
> (I don't want give the exact title to not make advertisement  in a post lol )
> 
> What's wrong?
> 
> Hi François,
> 
> Can you give a bit more context, perhaps? In macirb, are you loading a file 
> with the function or entering it at the prompt? In Xcode, do the queries 
> result from a pure ruby file, or are you doing a ruby call from Obj-C? What 
> libraries/gems are you using to connect to MySQL? Is there an 'eval' call 
> involved in making the queries?
> 
> To be honest, things should be much faster from Xcode, since macruby_deploy 
> will compile all of your ruby sources to .rbo files. The exception would be 
> if your code contains copious use of "eval". It is also possible that you 
> have stumbled on a perf bug (the best kind of bug, IMHO), in which case it 
> would be great if you could reduce the code down to something minimal that 
> other devs could run locally.
> 
> Cheers,
> 
> Josh
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Hi Josh,

In macirb, I use:
load "actionAffiche.rb"
461 queries, real time: 11.578257s

In Xcode: 
I use rubygems and mysql macgems
I have one Button and one table with two columns: when I press the button, the 
function actionAffiche is running. I think that it's a complete minimal example.
461 queries, real time: 64.244236s
Apart MainMenu.xib, all my code is in AppDelegate.rb. I put this file at the 
end of this mail (Is there a better way?) 

I don't have control on mysql tables since they come from another software.

I am a novice, then you can criticize my code :)

Regards,
François

-------
#
#  AppDelegate.rb
#  ecm: exemple complet minimal
#
#  Created by Boone François on 11-12-21.
#  Copyright 2011 Boone François. All rights reserved.
#

require 'rubygems'
require 'mysql'

$data = []

class AppDelegate
    attr_accessor :window
    def applicationDidFinishLaunching(a_notification)
        # Insert code here to initialize your application
    end
end

class CtrButton
    attr_writer :individu
    
    def awakeFromNib
        @individu.dataSource = self
        $ref_individu = @individu
    end
    
    def affiche(sender)
        actionAffiche
    end
    
    def numberOfRowsInTableView(individu)
        $data.size
    end
    
    def tableView(individu, objectValueForTableColumn:column, row:index)
        item = $data[index]
        case column.identifier
            when 'iden'
            item.iden 
            when 'name'
            item.name 
        end
    end    
end

class Person
    attr_accessor :iden, :name
end

def actionAffiche
    
    t1 = Time.now
    # Connexion au serveur MySQL 
    begin
        dbh = Mysql.real_connect("localhost", "root", "", "Boone") 
        ## Récupération de la version du serveur et affichage
        puts "Version du serveur: " + dbh.get_server_info
        rescue Mysql::Error => e 
        puts "Code d'erreur : #{e.errno}" 
        puts "Message d'erreur : #{e.error}" 
        puts "SQLSTATE d'erreur : #{e.sqlstate}" if e.respond_to?("sqlstate")
        ensure
        dbh.query("SET NAMES utf8")
    end
        
    # Requête pour le nom de famille
    dbh.query("SET NAMES utf8")
    requete = "SELECT handle,surname FROM surname ORDER BY surname"
    reponse = dbh.query(requete)
        
    num_max = reponse.num_rows
    num = 1
        
    # Pour chaque nom de famille, on cherche le prenom
    reponse.each_hash do |lastname|
        puts "Individu " + num.to_s + " sur " + num_max.to_s
        individu = Person.new
        individu.iden = lastname["handle"]
        individu.name = lastname["surname"]
        # pour chaque nom, recherche du prenom à partir du handle.
        requete2 = "SELECT first_name,xcall FROM name WHERE handle ='" + 
lastname["handle"] + "'"
        reponse2 = dbh.query(requete2)
        reponse2.each_hash do |firstname|
            individu.name = individu.name + ", " + firstname["first_name"] 
            if firstname["xcall"] != ""
                individu.name = individu.name + " (" + firstname["xcall"] + ")"
            end
        end

        $data.push(individu)
        num += 1
    end
        
    # On ferme le lien mySQL
    dbh.close
        
    t2 = Time.now
    puts (t2-t1)
    # Mise à jour de l'interface
    $ref_individu.reloadData
end


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to