2017-03-10 22 views
0

我編寫了JavaFX應用程序並將其連接到我的Windows PC中的本地數據庫。一切正常,但當我將數據庫複製到遠程服務器並嘗試連接時,應用程序變得更慢。 我試圖嗅探PC和服務器之間的MySql會話,並決定它不是網絡問題,因爲PC查詢和服務器響應最後一個數據包到達之間的時間僅爲0.2秒,而應用程序需要4-5秒才能顯示事件的結果。 我知道更好的方法是在遠程服務器上運行Web服務,但在更改應用程序之前,我需要知道,爲什麼應用程序變得更慢?爲什麼我的數據庫放到遠程服務器時,我的java應用程序變慢了?

這裏是休眠CFG文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://serverURLhere:3306/second_attempt_hibernate</property> 
     <property name="connection.username">usernameHere</property> 
     <property name="connection.password">passwHere</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
     <property name="hibernate.connection.autocommit">false</property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">update</property> 
     <mapping class="models.Employee"/> 
     <mapping class="models.Documents"/> 
     <mapping class="models.DocTypes"/> 
     <mapping class="models.DocStatuses"/> 
     <mapping class="models.MailOrder"/> 
     <mapping class="models.MailOrderStatuses"/> 
    </session-factory> 
</hibernate-configuration> 

回答

1

我會很驚訝,相反的。

你不指定你指的是什麼事件,所以很難給你一個建議。

我會記錄很多事件,並嘗試查看哪些操作是最昂貴的。

當然,數據庫初始化會花費更多的0.2秒,您正在驗證和更新數據庫<property name="hbm2ddl.auto">update</property>,這可能是有用的,但需要時間。

優化可以是編程中最困難的任務之一,所以儘可能地隔離你的問題,並孤立地測試它們以給予適當的權重。

+0

非常感謝!我已經做到了!你的建議幫助了我! – Rinat

+0

我發現每次打開某個應用程序窗口時,它都會將SELECT查詢發送到數據庫。我將我的ObservableList類型字段移動到WindowController超類,並將它們設置爲靜態。現在,它們只在應用程序啓動時初始化一次。從WindowController超類繼承的每個窗口都可以檢索此ObservableLists並將項目設置爲組合框。 – Rinat

相關問題