I just describe about concat methods  at previous post. Some guy asked me 'just method ?'  and I answered  'I will test'.
Only run twice about tree methods.  This test show only running time.  It does not consider memory usages. Next time I will consider both of them (time and memory).
If you have any advice. comment please.
Thanks.
==Test result. ==
2014-01-10 10:39:56,700 INFO -------------------------------------
2014-01-10 10:39:56,700 DEBUG START(Normal string Plus)
2014-01-10 10:40:06,388 DEBUG END: running time==>9
2014-01-10 10:40:06,390 DEBUG START(StreamWriter)
2014-01-10 10:42:15,395 DEBUG END: running time==>129
2014-01-10 10:42:15,395 DEBUG START(List and Join)
2014-01-10 10:42:27,121 DEBUG END: running time==>11
2014-01-10 10:42:56,802 INFO -------------------------------------
2014-01-10 10:42:56,802 DEBUG START(Normal string Plus)
2014-01-10 10:43:06,098 DEBUG END: running time==>9
2014-01-10 10:43:06,098 DEBUG START(StreamWriter)
2014-01-10 10:45:22,296 DEBUG END: running time==>136
2014-01-10 10:45:22,296 DEBUG START(List and Join)
2014-01-10 10:45:33,914 DEBUG END: running time==>11
== TEST Code ==
import datetime
import time
import sys
import logging
import codecs
import cStringIO, codecs
class StringOperation:
#using + 
 def run_concat_test_01(self):  
  for idx in range(1,1000):
   src = "{}".format(idx)
   for subidx in range(1,10000):
    src = src + "AAAAA"
    src = src + "BBBBB"
    src = src + "BBBBB"
    src = src + "CCCCC"
    src = src + "한글 " # non romantic 
   
   res = src # coppy other
 #using writer 
 def run_concat_test_02(self):
  
  for idx in range(1,1000):
   source = cStringIO.StringIO()
   wrapper = codecs.getwriter("utf8")(source)
   wrapper.writelines("{}".format(idx))
   for subidx in range(1,10000):
    wrapper.writelines("AAAAA")
    wrapper.writelines("BBBBB")
    wrapper.writelines("BBBBB")
    wrapper.writelines("CCCCC")
    wrapper.writelines(u"한글") #non romantic
   res = wrapper.getvalue() #copy res
   source.close()
  
 # using list + join 
 def run_concat_test_03(self):
  for idx in range(1,1000):
   source = []
   source.append("{}".format(idx))
   for subidx in range(1,10000):
    source.append("AAAAA")
    source.append("BBBBB")
    source.append("BBBBB")
    source.append("CCCCC")
    source.append(u"한글") #non romantic
   
   res = "".join(source)
  
 def  run_test(self, title, func_idx):
  funcs={
   "plus": self.run_concat_test_01, 
   "writer": self.run_concat_test_02, 
   "list":self.run_concat_test_03}
  st_time = datetime.datetime.now()
  logging.debug("START({})".format(title))
  funcs[func_idx]()
  ed_time = datetime.datetime.now()
  diff_time = ed_time - st_time 
  logging.debug("END: running time : {} seconds\r\n".format(diff_time.seconds))
today = datetime.date.today()
fname = "{0}{1}{2}-String_operation.log".format(today.year,today.month,today.day)
logging.basicConfig(filename=fname,level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s')
logging.info("-------------------------------------") 
oTester = StringOperation()
print "Plus Method"
oTester.run_test("Normal string Plus","plus")
print "Writer Method"
oTester.run_test("StreamWriter", "writer")
print "List Method"
oTester.run_test("List and Join","list")
== Running Environment==
windows 7  64bit
memory : 8G
pythone 2.7.3   (32bit)   # I used 32bit for compatibility
댓글 없음:
댓글 쓰기