2013-04-09 3 views
7

बस कुछ स्विंगक्स-डब्ल्यू घटकों को समग्र स्विंगलैब्स डेमो में जोड़ने की कोशिश की - और ध्यान दिया कि एक साधारण जेएक्समैपकिट/-वियर स्थानीय स्तर पर लोड होने की तुलना में webstartable में टाइल्स को लोड करने के लिए तीव्रता के आदेश धीमा है।JXMapKit/-Viewer वेबस्टेस्टेबल के रूप में बेहद धीमा - जहां खुदाई शुरू करें?

बल्कि खो दिया पर मैं कहाँ (यूआई अद्यतन, EDT पर होने लगते हैं, हालांकि निकट से देखने की आवश्यकता हो सकती) तलाश शुरू करना चाहिए:

  • किसी और विभिन्न लोड हो रहा है समय का अनुभव?
  • कोई कारण क्या हो सकता है इस पर कोई अनुमान है?
  • वेबस्टेस्टेबल को डीबग कैसे करें?

कोड बल्कि सीधा है (स्थानीय रूप से चलाने के लिए, आप swingx and swingx-ws की आवश्यकता होगी:

public class WSDemo { 

    private JComponent createContent() { 
     JComponent content = new JPanel(); 
     content.setLayout(new BorderLayout()); 

     content.add(createMapKit()); 
     return content; 
    } 

    protected JComponent createMapKit() { 
     final int max = 17; 
     TileFactoryInfo info = new TileFactoryInfo(1, max - 2, max, 256, true, 
       true, // tile size is 256 and x/y orientation is normal 
       "http://tile.openstreetmap.org",// 5/15/10.png", 
       "x", "y", "z") { 
      public String getTileUrl(int x, int y, int zoom) { 
       zoom = max - zoom; 
       String url = this.baseURL + "/" + zoom + "/" + x + "/" + y 
         + ".png"; 
       return url; 
      } 

     }; 
     DefaultTileFactory tf = new DefaultTileFactory(info); 
     tf.setThreadPoolSize(1); 
     final JXMapKit kit = new JXMapKit(); 
     kit.setTileFactory(tf); 
     kit.setZoom(10); 
     kit.setAddressLocation(new GeoPosition(51.5, 0)); 
     kit.getMainMap().setDrawTileBorders(true); 
     return kit; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame frame = new JFrame(""); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new WSDemo().createContent()); 
       frame.setLocationByPlatform(true); 
       frame.setSize(400, 400); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

संपादित:

लगता है जैसे कि यह किसी भी तरह की अनुमति वेब संदर्भ में जाँच से संबंधित है: प्रोफाइलिंग से पता चलता है कि पूरा कनेक्शन कॉल स्टैक अलग है (अत्यधिक आश्चर्यजनक नहीं) और उम्र लेता है। अब के लिए दे रहा है ..

संपादित 2:

2 अलग मुद्दों

  • कुछ हद तक लंबे समय यह सुरक्षा प्रतिबंधित संदर्भ में टाइल लोड करने के लिए कनेक्शन को खोलने के लिए ले जाता है होना करने के लिए वहाँ लगता है, कि JavaWebStartSecurity में हॉटस्पॉट है। चेककनेक्ट (स्ट्रिंग, int), जैसा @ हावर्ड पहले से ही नोट किया गया है।
  • EDT की एक नहीं बल्कि अजीब अवरुद्ध करता है, तो MapKit (BSAF का)

एक SingleFrameApplication में प्रयोग किया जाता है अवरुद्ध पुन: पेश करने के लिए, SimpleWSDemoApp चलाने तभी हो रहा है कि, जब तक प्रतीक्षा करें मानचित्र दिखाई देता है (लेता है कुछ समय, यह पहला मुद्दा है) फिर ज़ूम अंगूठे को ऊपर और नीचे ले जाने के लिए माउस का उपयोग करें: ui पूरी तरह अवरुद्ध है। सादे फ्रेम (शीर्ष पर संदर्भ) पर ऐसा करने से प्रारंभिक लोडिंग प्रतीक्षा होती है, लेकिन कभी भी अवरोधन को पुन: उत्पन्न नहीं कर सका।

(मेरे लिए) अजीब thingy VisualVM का धागा डंप से क्या ब्लॉक EDT, है:

"AWT-EventQueue-0" prio=6 tid=0x063d3000 nid=0x1468 waiting for monitor entry [0x05efe000] 
    java.lang.Thread.State: BLOCKED (on object monitor) 
    at java.security.Permissions.implies(Unknown Source) 
    - waiting to lock <0x29f7b118> (a java.security.Permissions) 
    at sun.security.provider.PolicyFile.implies(Unknown Source) 
    at java.security.ProtectionDomain.implies(Unknown Source) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkSystemClipboardAccess(Unknown Source) 
    at java.awt.event.InputEvent.canAccessSystemClipboard(Unknown Source) 
    at java.awt.event.InputEvent.<init>(Unknown Source) 
    at java.awt.event.MouseEvent.<init>(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 

कि क्लिपबोर्ड पहुँच के लिए अनुमति की जाँच में माउस किक खींच रहा है ...

+2

विजुअलVM ने मुझे 'जावावेबस्टार्ट सुरक्षा) चेककनेक्ट (स्ट्रिंग, int)' के अंदर एक चरम हॉटस्पॉट दिखाया और वहां 'होस्टबी एडर (बाइट [])' प्राप्त हुआ। क्या आप इस व्यवहार को सत्यापित कर सकते हैं? – Howard

+0

@ हावर्ड - धन्यवाद, – kleopatra

+0

@ हावर्ड सत्यापित - और इसके बारे में कोई जानकारी नहीं है .. – kleopatra

उत्तर

3

एक वेब स्टार्ट ऐप भी एक जेवीएम प्रक्रिया है ताकि आप इसे VisualVM के साथ प्रोफाइल करने का प्रयास कर सकें (यह प्रविष्टि वर्णन करती है कि यह कैसे करें)। VisualVM के साथ दोनों अनुप्रयोगों को प्रोफ़ाइल करने और हेप आकार, जेआईटी कंपाइलर मतभेद जैसे जेवीएम सेटिंग्स की तुलना करना भी उचित है। मुझे लगता है कि एक वेब स्टार्ट एप्लिकेशन क्लाइंट कंपाइलर के साथ चलता है, जो एक सर्वर कंपाइलर से उत्पादित देशी कोड के माध्यम से धीमा है।

+0

visualVM गंदगी में खोदने में वास्तव में सहायक है, मेरी इच्छा है कि इस सूचक के लिए मेरे पास एक से अधिक उपरोक्त था :-) – kleopatra

संबंधित मुद्दे