আমি সর্বদা দ্বিতীয় পদ্ধতিতে (জি স্ট্রিং টেম্পলেট ব্যবহার করে) যাই, যদিও আপনার মতো প্যারামিটারের বেশি যখন থাকে তখন আমি এগুলিকে গুটিয়ে ফেলার চেষ্টা ${X}
করি যেহেতু এটি আরও পাঠযোগ্য।
এই পদ্ধতিগুলিতে কিছু বেঞ্চমার্ক চালানো ( নাগাই মাসাটো'র দুর্দান্ত জিবেঞ্চ মডিউল ব্যবহার করে ) এছাড়াও দেখায় যে অন্যান্য পদ্ধতির তুলনায় টেম্প্লেটিং দ্রুততর হয়:
@Grab( 'com.googlecode.gbench:gbench:0.3.0-groovy-2.0' )
import gbench.*
def (foo,bar,baz) = [ 'foo', 'bar', 'baz' ]
new BenchmarkBuilder().run( measureCpuTime:false ) {
'String adder' {
foo + bar + baz
}
'GString template' {
"$foo$bar$baz"
}
'Readable GString template' {
"${foo}${bar}${baz}"
}
'StringBuilder' {
new StringBuilder().append( foo )
.append( bar )
.append( baz )
.toString()
}
'StringBuffer' {
new StringBuffer().append( foo )
.append( bar )
.append( baz )
.toString()
}
}.prettyPrint()
এটি আমার মেশিনে আমাকে নিম্নলিখিত ফলাফল দেয়:
Environment
===========
* Groovy: 2.0.0
* JVM: Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415, Apple Inc.)
* JRE: 1.6.0_31
* Total Memory: 81.0625 MB
* Maximum Memory: 123.9375 MB
* OS: Mac OS X (10.6.8, x86_64)
Options
=======
* Warm Up: Auto
* CPU Time Measurement: Off
String adder 539
GString template 245
Readable GString template 244
StringBuilder 318
StringBuffer 370
এর পক্ষে পাঠযোগ্যতা এবং গতির সাথে, আমি টেম্পলেট দেওয়ার প্রস্তাব দেব ;-)
বিশেষ দ্রষ্টব্য: আপনি যুক্ত করে থাকেন toString()
আউটপুট অন্যান্য মেট্রিকের মত একই ধরনের করতে GString পদ্ধতি শেষে, এবং এটি একটি উত্তম পরীক্ষা করতে, StringBuilder
এবং StringBuffer
বীট গতির জন্য GString পদ্ধতি। তবে যেহেতু বেশিরভাগ জিনিসের জন্য জিস্ট্রিং স্ট্রিংয়ের জায়গায় ব্যবহার করা যেতে পারে (আপনাকে কেবল মানচিত্র কী এবং এসকিউএল বিবৃতি দিয়ে সতর্কতা অবলম্বন করা উচিত), বেশিরভাগ ক্ষেত্রে এটি চূড়ান্ত রূপান্তর ছাড়াই ছেড়ে যেতে পারে
এই পরীক্ষাগুলি যুক্ত করা (যেমন এটি মন্তব্যে জিজ্ঞাসা করা হয়েছে)
'GString template toString' {
"$foo$bar$baz".toString()
}
'Readable GString template toString' {
"${foo}${bar}${baz}".toString()
}
এখন আমরা ফলাফলগুলি পেয়েছি:
String adder 514
GString template 267
Readable GString template 269
GString template toString 478
Readable GString template toString 480
StringBuilder 321
StringBuffer 369
সুতরাং আপনি যেমন দেখতে পাচ্ছেন (যেমন আমি বলেছি), এটি স্ট্রিংবিল্ডার বা স্ট্রিংবুফারের চেয়ে ধীরে ধীরে তবে স্ট্রিংস যুক্ত করার চেয়ে কিছুটা দ্রুত ...
তবে এখনও অনেক বেশি পাঠযোগ্য।
নীচে গ্রামীণ কোডার দ্বারা মন্তব্য করার পরে সম্পাদনা করুন
সর্বশেষ জিবেঞ্চে আপডেট হয়েছে, সংক্ষিপ্তকরণের জন্য বৃহত্তর স্ট্রিং এবং স্ট্রিংবিল্ডারের সাথে একটি পরীক্ষা ভাল আকারে শুরু করা:
@Grab( 'org.gperfutils:gbench:0.4.2-groovy-2.1' )
def (foo,bar,baz) = [ 'foo' * 50, 'bar' * 50, 'baz' * 50 ]
benchmark {
'String adder' {
foo + bar + baz
}
'GString template' {
"$foo$bar$baz"
}
'Readable GString template' {
"${foo}${bar}${baz}"
}
'GString template toString' {
"$foo$bar$baz".toString()
}
'Readable GString template toString' {
"${foo}${bar}${baz}".toString()
}
'StringBuilder' {
new StringBuilder().append( foo )
.append( bar )
.append( baz )
.toString()
}
'StringBuffer' {
new StringBuffer().append( foo )
.append( bar )
.append( baz )
.toString()
}
'StringBuffer with Allocation' {
new StringBuffer( 512 ).append( foo )
.append( bar )
.append( baz )
.toString()
}
}.prettyPrint()
দেয়
Environment
===========
* Groovy: 2.1.6
* JVM: Java HotSpot(TM) 64-Bit Server VM (23.21-b01, Oracle Corporation)
* JRE: 1.7.0_21
* Total Memory: 467.375 MB
* Maximum Memory: 1077.375 MB
* OS: Mac OS X (10.8.4, x86_64)
Options
=======
* Warm Up: Auto (- 60 sec)
* CPU Time Measurement: On
user system cpu real
String adder 630 0 630 647
GString template 29 0 29 31
Readable GString template 32 0 32 33
GString template toString 429 0 429 443
Readable GString template toString 428 1 429 441
StringBuilder 383 1 384 396
StringBuffer 395 1 396 409
StringBuffer with Allocation 277 0 277 286
.toString()
দুটি জিস্ট্রিং পরীক্ষায় যুক্ত করে পুনরায় পরীক্ষা করা উচিত। আমার রান দেখায় যে তারা তখন প্রায় একই রকম সম্পাদন করেString adder
। আমার অনুমান যে আপনি যে পরীক্ষাটি চালিয়েছেন তা প্রকৃতপক্ষে সংক্ষেপণ পরিচালনা করে না, সুতরাং এটি কেবল একটি জিস্ট্রিং অবজেক্ট তৈরি করে রেফারেন্সগুলি সঞ্চয় করে।StringBuilder
যদি আপনারString
কোনও পর্যায়ে দরকার হয় তবে এটি দ্রুততম, নীচে হাত ।