কোনও পদ্ধতি কার্যকর করার জন্য কত সময় নির্ধারণ করার উপায় আছে (মিলিসেকেন্ডে)?
কোনও পদ্ধতি কার্যকর করার জন্য কত সময় নির্ধারণ করার উপায় আছে (মিলিসেকেন্ডে)?
উত্তর:
NSDate *methodStart = [NSDate date];
/* ... Do whatever you need to do ... */
NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"executionTime = %f", executionTime);
সুইফট:
let methodStart = NSDate()
/* ... Do whatever you need to do ... */
let methodFinish = NSDate()
let executionTime = methodFinish.timeIntervalSinceDate(methodStart)
print("Execution time: \(executionTime)")
Swift3:
let methodStart = Date()
/* ... Do whatever you need to do ... */
let methodFinish = Date()
let executionTime = methodFinish.timeIntervalSince(methodStart)
print("Execution time: \(executionTime)")
ব্যবহার করা সহজ এবং সাব-মিলিসেকেন্ড যথার্থতা রয়েছে।
NSLog(@"executionTime = %f", executionTime);
NSDate
এবং mach_absolute_time()
প্রায় 30 মিমি স্তরে। 27 বনাম 29, 36 বনাম 39, 43 বনাম 45. NSDate
আমার জন্য ব্যবহার করা সহজ ছিল এবং ফলাফলগুলি বিরক্ত না করার মতো যথেষ্ট ছিল mach_absolute_time()
।
এখানে আমি ব্যবহার করছি দুটি এক-লাইন ম্যাক্রো:
#define TICK NSDate *startTime = [NSDate date]
#define TOCK NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])
এটি এর মতো ব্যবহার করুন:
TICK;
/* ... Do Some Work Here ... */
TOCK;
#define TOCK NSLog(@"%s Time: %f", __func__, -[startTime timeIntervalSinceNow])
টাইমারটি কোন ফাংশনে ব্যবহৃত হয়েছিল তা এই উত্তরটিও ফিরিয়ে দেয় I আমি যদি একাধিক ফাংশন সময় টিক টাক ব্যবহার করি তবে আমি এই দরকারী বলে মনে করি।
__PRETTY_FUNCTION__
এবং __LINE__
আপনি আরো বিস্তারিত তথ্য চান।
ওএস এক্স-তে সূক্ষ্ম শস্যযুক্ত সময়ের জন্য আপনার mach_absolute_time( )
ঘোষিত ব্যবহার করা উচিত <mach/mach_time.h>
:
#include <mach/mach_time.h>
#include <stdint.h>
// Do some stuff to setup for timing
const uint64_t startTime = mach_absolute_time();
// Do some stuff that you want to time
const uint64_t endTime = mach_absolute_time();
// Time elapsed in Mach time units.
const uint64_t elapsedMTU = endTime - startTime;
// Get information for converting from MTU to nanoseconds
mach_timebase_info_data_t info;
if (mach_timebase_info(&info))
handleErrorConditionIfYoureBeingCareful();
// Get elapsed time in nanoseconds:
const double elapsedNS = (double)elapsedMTU * (double)info.numer / (double)info.denom;
অবশ্যই সূক্ষ্ম দানযুক্ত পরিমাপ সম্পর্কে স্বাভাবিক সতর্কতাগুলি প্রয়োগ হয়; আপনি সম্ভবত পরীক্ষার অধীনে রুটিনটি বেশ কয়েকবার চাওয়া, এবং গড়পড়তা / ন্যূনতম / কোনও অন্য রূপের প্রক্রিয়াজাতকরণ বন্ধ করে দিতে পারেন।
অতিরিক্ত হিসাবে, দয়া করে নোট করুন যে আপনি শার্কের মতো একটি সরঞ্জাম ব্যবহার করে আপনার অ্যাপ্লিকেশনটি চালানোর জন্য প্রোফাইলটিকে আরও দরকারী মনে করতে পারেন। এটি আপনাকে সঠিক সময়সীমা তথ্য দেবে না, তবে এটি আপনাকে জানাবে যে আবেদনের কত শতাংশ সময় ব্যয় করা হচ্ছে, যা প্রায়শই বেশি কার্যকর (তবে সবসময় নয়)।
এর জন্য একটি সুবিধাজনক মোড়ক রয়েছে mach_absolute_time()
- এটি একটি CACurrentMediaTime()
ফাংশন।
অফসেটের বিপরীতে
NSDate
বাCFAbsoluteTimeGetCurrent()
অফসেট নয়mach_absolute_time()
এবংCACurrentMediaTime()
এটি অভ্যন্তরীণ হোস্ট ক্লকের উপর ভিত্তি করে, একটি সুনির্দিষ্ট, একাকীকরণীয় পরিমাপ, এবং বাহ্যিক সময়ের রেফারেন্সের পরিবর্তনের সাপেক্ষে নয় যেমন সময় অঞ্চল, দিবালোকের সঞ্চয় বা লিপ সেকেন্ডের কারণে ঘটে।
ObjC
CFTimeInterval startTime = CACurrentMediaTime();
// Do your stuff here
CFTimeInterval endTime = CACurrentMediaTime();
NSLog(@"Total Runtime: %g s", endTime - startTime);
দ্রুতগতি
let startTime = CACurrentMediaTime()
// Do your stuff here
let endTime = CACurrentMediaTime()
print("Total Runtime: \(endTime - startTime) s")
NSDate
।
সুইফটে, আমি ব্যবহার করছি:
আমার ম্যাক্রোস.সুইফ্টে আমি সবেমাত্র যুক্ত করেছি
var startTime = NSDate()
func TICK(){ startTime = NSDate() }
func TOCK(function: String = __FUNCTION__, file: String = __FILE__, line: Int = __LINE__){
println("\(function) Time: \(startTime.timeIntervalSinceNow)\nLine:\(line) File: \(file)")
}
আপনি এখন কেবল যে কোনও জায়গায় কল করতে পারেন
TICK()
// your code to be tracked
TOCK()
\(-startTime.timeIntervalSinceNow)
(নেতিবাচক দিকে লক্ষ্য করুন)
আমি জানি এটি একটি পুরানো তবে এমনকি আমি নিজেকে এটির সাথে আবার ঘুরে বেড়াতে দেখেছি, তাই আমি ভেবেছিলাম আমি নিজের বিকল্পটি এখানে জমা দেব।
সেরা বেট হ'ল এটি সম্পর্কে আমার ব্লগ পোস্টটি পরীক্ষা করা: উদ্দেশ্য-সি- তে জিনিসগুলির সময়: একটি স্টপওয়াচ
মূলত, আমি একটি ক্লাস লিখেছিলাম যা খুব প্রাথমিক উপায়ে দেখা বন্ধ করে দেয় না তবে এনপ্যাপসুলেটেড করা হয় যাতে আপনার কেবল নিম্নলিখিতটি করা দরকার:
[MMStopwatchARC start:@"My Timer"];
// your work here ...
[MMStopwatchARC stop:@"My Timer"];
এবং আপনি এখানে দিয়ে শেষ:
MyApp[4090:15203] -> Stopwatch: [My Timer] runtime: [0.029]
লগ ইন ...
আবার, আমার পোস্টটি আরও কিছুবার জন্য দেখুন বা এটি ডাউনলোড করুন: এমএমএসটোপওয়াচ.জিপ
আমি রনের সমাধানের ভিত্তিতে ম্যাক্রোগুলি ব্যবহার করি ।
#define TICK(XXX) NSDate *XXX = [NSDate date]
#define TOCK(XXX) NSLog(@"%s: %f", #XXX, -[XXX timeIntervalSinceNow])
কোড লাইন জন্য:
TICK(TIME1);
/// do job here
TOCK(TIME1);
আমরা কনসোলে এমন কিছু দেখতে পাব: TIME1: 0.096618
আমি এই ব্লগ পোস্ট থেকে কোড দ্বারা অনুপ্রাণিত খুব ন্যূনতম, একটি পৃষ্ঠার শ্রেণীর প্রয়োগ ব্যবহার করছি :
#import <mach/mach_time.h>
@interface DBGStopwatch : NSObject
+ (void)start:(NSString *)name;
+ (void)stop:(NSString *)name;
@end
@implementation DBGStopwatch
+ (NSMutableDictionary *)watches {
static NSMutableDictionary *Watches = nil;
static dispatch_once_t OnceToken;
dispatch_once(&OnceToken, ^{
Watches = @{}.mutableCopy;
});
return Watches;
}
+ (double)secondsFromMachTime:(uint64_t)time {
mach_timebase_info_data_t timebase;
mach_timebase_info(&timebase);
return (double)time * (double)timebase.numer /
(double)timebase.denom / 1e9;
}
+ (void)start:(NSString *)name {
uint64_t begin = mach_absolute_time();
self.watches[name] = @(begin);
}
+ (void)stop:(NSString *)name {
uint64_t end = mach_absolute_time();
uint64_t begin = [self.watches[name] unsignedLongLongValue];
DDLogInfo(@"Time taken for %@ %g s",
name, [self secondsFromMachTime:(end - begin)]);
[self.watches removeObjectForKey:name];
}
@end
এটির ব্যবহার খুব সহজ:
[DBGStopwatch start:@"slow-operation"];
শুরুতে কল করুন[DBGStopwatch stop:@"slow-operation"];
পরে, সময়টি পেতেআপনি এই স্টপওয়াচ ক্লাসটি ব্যবহার করে সত্যই সূক্ষ্ম সময় (সেকেন্ডের সেকেন্ডের পার্টস) পেতে পারেন । এটি আইফোনে উচ্চ-নির্ভুলতা টাইমার ব্যবহার করে। এনএসডিট ব্যবহার করা আপনাকে কেবল দ্বিতীয় (গুলি) নির্ভুলতা পাবে। এই সংস্করণটি অটোরিলেজ এবং উদ্দেশ্য-সি জন্য বিশেষভাবে ডিজাইন করা হয়েছে। আমার প্রয়োজনে সি ++ সংস্করণও রয়েছে। আপনি সি ++ সংস্করণটি এখানে পাবেন ।
StopWatch.h
#import <Foundation/Foundation.h>
@interface StopWatch : NSObject
{
uint64_t _start;
uint64_t _stop;
uint64_t _elapsed;
}
-(void) Start;
-(void) Stop;
-(void) StopWithContext:(NSString*) context;
-(double) seconds;
-(NSString*) description;
+(StopWatch*) stopWatch;
-(StopWatch*) init;
@end
StopWatch.m
#import "StopWatch.h"
#include <mach/mach_time.h>
@implementation StopWatch
-(void) Start
{
_stop = 0;
_elapsed = 0;
_start = mach_absolute_time();
}
-(void) Stop
{
_stop = mach_absolute_time();
if(_stop > _start)
{
_elapsed = _stop - _start;
}
else
{
_elapsed = 0;
}
_start = mach_absolute_time();
}
-(void) StopWithContext:(NSString*) context
{
_stop = mach_absolute_time();
if(_stop > _start)
{
_elapsed = _stop - _start;
}
else
{
_elapsed = 0;
}
NSLog([NSString stringWithFormat:@"[%@] Stopped at %f",context,[self seconds]]);
_start = mach_absolute_time();
}
-(double) seconds
{
if(_elapsed > 0)
{
uint64_t elapsedTimeNano = 0;
mach_timebase_info_data_t timeBaseInfo;
mach_timebase_info(&timeBaseInfo);
elapsedTimeNano = _elapsed * timeBaseInfo.numer / timeBaseInfo.denom;
double elapsedSeconds = elapsedTimeNano * 1.0E-9;
return elapsedSeconds;
}
return 0.0;
}
-(NSString*) description
{
return [NSString stringWithFormat:@"%f secs.",[self seconds]];
}
+(StopWatch*) stopWatch
{
StopWatch* obj = [[[StopWatch alloc] init] autorelease];
return obj;
}
-(StopWatch*) init
{
[super init];
return self;
}
@end
শ্রেণীর একটি স্থিতিশীল stopWatch
পদ্ধতি রয়েছে যা একটি স্বতঃস্ফূর্ত বিষয়টিকে ফেরত দেয়।
একবার আপনি কল করার পরে start
, seconds
সময় অতিবাহিত করার জন্য পদ্ধতিটি ব্যবহার করুন । start
এটি পুনরায় চালু করতে আবার কল করুন । বা stop
এটি বন্ধ করতে। কল করার seconds
পরে আপনি যে কোনও সময় (কল ) পড়তে পারেন stop
।
একটি কার্যকারণে উদাহরণ (মৃত্যুর সময় নির্ধারণের কল)
-(void)SomeFunc
{
StopWatch* stopWatch = [StopWatch stopWatch];
[stopWatch Start];
... do stuff
[stopWatch StopWithContext:[NSString stringWithFormat:@"Created %d Records",[records count]]];
}
আমি এই কোডটি ব্যবহার করি:
#import <mach/mach_time.h>
float TIME_BLOCK(NSString *key, void (^block)(void)) {
mach_timebase_info_data_t info;
if (mach_timebase_info(&info) != KERN_SUCCESS)
{
return -1.0;
}
uint64_t start = mach_absolute_time();
block();
uint64_t end = mach_absolute_time();
uint64_t elapsed = end - start;
uint64_t nanos = elapsed * info.numer / info.denom;
float cost = (float)nanos / NSEC_PER_SEC;
NSLog(@"key: %@ (%f ms)\n", key, cost * 1000);
return cost;
}
আমি এটি ব্যবহার:
clock_t start, end;
double elapsed;
start = clock();
//Start code to time
//End code to time
end = clock();
elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
NSLog(@"Time: %f",elapsed);
তবে আমি আইফোনে CLOCKS_PER_SEC সম্পর্কে নিশ্চিত নই। আপনি এটি ছেড়ে দিতে চাইবেন।
mach_absolute_time()
সুইফট 4 এ সূক্ষ্ম দানা বেঁধে দেওয়া সময়ের উদাহরণ :
let start = mach_absolute_time()
// do something
let elapsedMTU = mach_absolute_time() - start
var timebase = mach_timebase_info()
if mach_timebase_info(&timebase) == 0 {
let elapsed = Double(elapsedMTU) * Double(timebase.numer) / Double(timebase.denom)
print("render took \(elapsed)")
}
else {
print("timebase error")
}
ঠিক আছে, যদি আপনার উদ্দেশ্যটি দ্রুততর করার জন্য আপনি কী ঠিক করতে পারেন তা খুঁজে বের করা, এটি কিছুটা ভিন্ন লক্ষ্য। ফাংশনগুলির সময় নির্ধারণ করা আপনার কোনও পার্থক্য করেছে কি না তা খুঁজে বের করার একটি ভাল উপায়, তবে আপনাকে কী করতে হবে তা জানার জন্য আলাদা কৌশল প্রয়োজন। এটি আমি পরামর্শ দিচ্ছি এবং আমি জানি আপনি এটি আইফোনে করতে পারেন।
সম্পাদনা: পর্যালোচকরা পরামর্শ দিয়েছিলেন যে আমি উত্তরটি আরও বিস্তৃত করব, তাই আমি এটি বলার জন্য একটি সংক্ষিপ্ত উপায়টি ভাবার চেষ্টা করছি।
আপনার সামগ্রিক প্রোগ্রামটি আপনাকে বিরক্ত করতে যথেষ্ট ঘড়ির সময় নেয়। ধরা যাক এটি এন সেকেন্ডের।
আপনি ধরে নিচ্ছেন আপনি এটিকে দ্রুত করতে পারবেন can আপনি কেবলমাত্র সেটাই করতে পারেন তা হ'ল সেই সময়ে এটি কিছু না করা, মি সেকেন্ডের জন্য অ্যাকাউন্টিং ।
আপনি প্রথমে জানেন না যে জিনিসটি কী। আপনি অনুমান করতে পারেন, সমস্ত প্রোগ্রামাররা যেমন করে তবে এটি সহজেই অন্যরকম কিছু হতে পারে। এটি যাই হোক না কেন, আপনি এটি এটি কীভাবে খুঁজে পেতে পারেন তা এখানে:
যেহেতু সেই জিনিসটি যাই হোক না কেন, সেই সময়ের ভগ্নাংশ এম / এন হিসাবে বিবেচিত হয়, এর অর্থ আপনি যদি এলোমেলোভাবে থামিয়ে দেন তবে সম্ভাবনা এম / এন হয় যে আপনি এই জিনিসটি করার জন্য এটি ধরবেন। অবশ্যই এটি অন্য কিছু করছে, তবে এটিকে বিরতি দিন এবং দেখুন এটি কী করছে।
এবার আবার কর। আপনি যদি আবার একই জিনিসটি করতে দেখেন তবে আপনি আরও সন্দেহজনক হতে পারেন।
এটি 10 বার বা 20 করুন Now আপনি কতটা সময় গ্রহণ করেন তা মোটামুটিভাবে জানেন তবে কী ঠিক করতে হবে তা আপনি খুব জানেন ।
আপনিও যদি জানতে চান যে ঠিক কতটা সময় বাঁচবে তবে তা সহজ। আগে এটি পরিমাপ করুন, এটি ঠিক করুন এবং পরে এটি পরিমাপ করুন। আপনি যদি সত্যিই হতাশ হন তবে ঠিক করুন out
আপনি দেখতে পাচ্ছেন যে এটি মাপার থেকে কীভাবে আলাদা? এটি সন্ধান করছে, মাপছে না । সর্বাধিক প্রোফাইলিং যথাযথভাবে কতটা সময় নেওয়া হয় তা পরিমাপের উপর ভিত্তি করে, যেমনটি গুরুত্বপূর্ণ, এবং হ্যান্ড-ওয়েভগুলি কী ঠিক করা দরকার তা সনাক্ত করার সমস্যাটি তৈরি করে। প্রোফাইলিং প্রতিটি সমস্যা খুঁজে পায় না, তবে এই পদ্ধতিটি প্রতিটি সমস্যা সন্ধান করে এবং এটি এমন সমস্যা যা আপনি খুঁজে পান না যা আপনাকে আঘাত করে।
ডিফার কীওয়ার্ডটি ব্যবহার করে তা করার জন্য এখানে সুইফটে আরও একটি উপায় রয়েছে
func methodName() {
let methodStart = Date()
defer {
let executionTime = Date().timeIntervalSince(methodStart)
print("Execution time: \(executionTime)")
}
// do your stuff here
}
অ্যাপলের ডক্স থেকে : একটি ডিফার স্টেটমেন্টটি ডিফার স্টেটমেন্টের যে পরিমাণ সুযোগসীমাতে উপস্থিত হয় তার বাইরে প্রোগ্রাম নিয়ন্ত্রণ স্থানান্তর করার আগে কোড নির্বাহের জন্য ব্যবহৃত হয়।
এটি সম্পর্কিত কোডটি গোষ্ঠীভুক্ত করার সুবিধার্থে চেষ্টা / অবশেষে ব্লকের অনুরূপ।
আমি এটি আমার ইউটিস লাইব্রেরিতে ( সুইফট ৪.২ ) ব্যবহার করি:
public class PrintTimer {
let start = Date()
let name: String
public init(file: String=#file, line: Int=#line, function: String=#function, name: String?=nil) {
let file = file.split(separator: "/").last!
self.name = name ?? "\(file):\(line) - \(function)"
}
public func done() {
let end = Date()
print("\(self.name) took \((end.timeIntervalSinceReferenceDate - self.start.timeIntervalSinceReferenceDate).roundToSigFigs(5)) s.")
}
}
... তারপরে এমন পদ্ধতিতে কল করুন:
func myFunctionCall() {
let timer = PrintTimer()
// ...
timer.done()
}
... যা চলার পরে কনসোলে এটির মতো দেখাচ্ছে:
MyFile.swift:225 - myFunctionCall() took 1.8623 s.
উপরের টিক / টকের মতো সংক্ষিপ্ত নয়, তবে এটি কী করছে তা দেখার পক্ষে যথেষ্ট স্পষ্ট এবং স্বয়ংক্রিয়ভাবে কী কী সময় নির্ধারিত হচ্ছে তা অন্তর্ভুক্ত রয়েছে (ফাইলের মাধ্যমে, পদ্ধতিটির শুরুতে লাইন এবং ফাংশন নাম)। স্পষ্টতই যদি আমি আরও বিশদ জানতে চাই (উদাহরণস্বরূপ, যদি আমি কেবল কোনও সাধারন ক্ষেত্রে যেমন কোনও মেথড কলের সময়সূচি না রাখি তবে পরিবর্তে সেই পদ্ধতির মধ্যে একটি ব্লকের সময় নির্ধারণ করি) তবে আমি মুদ্রণটাইম আর আই-তে "নাম =" ফু "" পরামিতি যুক্ত করতে পারি এটি ডিফল্ট ছাড়াও কিছু নামকরণ করা।
যেহেতু আপনি কোনও ইউআইবিউভিউতে একটি পৃষ্ঠা থেকে অন্য পৃষ্ঠায় যাওয়ার সময়কে অনুকূলিত করতে চান, তার অর্থ এই নয় যে আপনি এই পৃষ্ঠাগুলি লোড করার ক্ষেত্রে ব্যবহৃত জাভাস্ক্রিপ্টকে সত্যিই অনুকূলিত করছেন?
সে লক্ষ্যে আমি এখানে ওয়েবকিট প্রোফাইলারের দিকে তাকিয়েছিলাম about
http://www.alertdebugging.com/2009/04/29/building-a-better-javascript-profiler-with-webkit/
আরেকটি পদ্ধতি হ'ল উচ্চ স্তরে শুরু করা এবং আপনি একবারে পুরো ওয়েবভিউ রিফ্রেশ করার পরিবর্তে এজেএক্স শৈলীর পৃষ্ঠা লোডিংয়ের সাহায্যে লোড সময়কে হ্রাস করার প্রশ্নে ওয়েব পৃষ্ঠাগুলি কীভাবে ডিজাইন করতে পারেন তা ভাবুন।
struct TIME {
static var ti = mach_timebase_info()
static var k: Double = 1
static var mach_stamp: Double {
if ti.denom == 0 {
mach_timebase_info(&ti)
k = Double(ti.numer) / Double(ti.denom) * 1e-6
}
return Double(mach_absolute_time()) * k
}
static var stamp: Double { return NSDate.timeIntervalSinceReferenceDate() * 1000 }
}
do {
let mach_start = TIME.mach_stamp
usleep(200000)
let mach_diff = TIME.mach_stamp - mach_start
let start = TIME.stamp
usleep(200000)
let diff = TIME.stamp - start
print(mach_diff, diff)
}
দীর্ঘ চলমান প্রক্রিয়াটি খুঁজে পেতে কোথাও দ্বিখণ্ডিত কোডের জন্য এখানে একটি সুইফ্ট 3 সমাধান রয়েছে's
var increment: Int = 0
var incrementTime = NSDate()
struct Instrumentation {
var title: String
var point: Int
var elapsedTime: Double
init(_ title: String, _ point: Int, _ elapsedTime: Double) {
self.title = title
self.point = point
self.elapsedTime = elapsedTime
}
}
var elapsedTimes = [Instrumentation]()
func instrument(_ title: String) {
increment += 1
let incrementedTime = -incrementTime.timeIntervalSinceNow
let newPoint = Instrumentation(title, increment, incrementedTime)
elapsedTimes.append(newPoint)
incrementTime = NSDate()
}
ব্যবহার: -
instrument("View Did Appear")
print("ELAPSED TIMES \(elapsedTimes)")
নমুনা আউটপুট: -
এলপাসড টাইমস [মাইএপ.সোমভিউ কনট্রোলার.আইনসিসমেন্টেশন (শিরোনাম: "শুরু দেখুন কি লোড হয়েছে", পয়েন্ট: 1, এলপসডটাইম: 0.040504038333892822), মাইএপ.সোমভিউ কনট্রোলার.আইনজিমেন্টেশন (শিরোনাম: "সাবভিউগুলি যোগ করা শেষ হয়েছে", টাইপ: ২0০১০, ১০০১০, ১১১০ মাইএপ.সোমভিউকন্ট্রোলআরআইনসিমেন্টেশন (শিরোনাম: "দেখুন কি দেখা গেল", পয়েন্ট: 3, এলপসডটাইম: 0.56564098596572876)]
অনেক উত্তর অদ্ভুত এবং সত্যিই মিলিসেকেন্ডে ফলাফল দেয় না (তবে সেকেন্ডে বা অন্য কোনও কিছুতে):
আমি এমএস (মিলিসেকেন্ডস) পেতে কী ব্যবহার করি তা এখানে:
সুইফট:
let startTime = NSDate().timeIntervalSince1970 * 1000
// your Swift code
let endTimeMinusStartTime = NSDate().timeIntervalSince1970 * 1000 - startTime
print("time code execution \(endTimeMinStartTime) ms")
উদ্দেশ্য গ:
double startTime = [[NSDate date] timeIntervalSince1970] * 1000.0;
// your Objective-C code
double endTimeMinusStartTime = [[NSDate date] timeIntervalSince1970] * 1000.0 - startTime;
printf("time code execution %f ms\n", endTimeMinusStartTime );
সুইফ্ট 4 এর জন্য, আপনার শ্রেণিতে একজন প্রতিনিধি হিসাবে যুক্ত করুন:
public protocol TimingDelegate: class {
var _TICK: Date?{ get set }
}
extension TimingDelegate {
var TICK: Date {
_TICK = Date()
return(_TICK)!
}
func TOCK(message: String) {
if (_TICK == nil){
print("Call 'TICK' first!")
}
if (message == ""){
print("\(Date().timeIntervalSince(_TICK!))")
}
else{
print("\(message): \(Date().timeIntervalSince(_TICK!))")
}
}
}
আমাদের ক্লাসে যুক্ত করুন:
class MyViewcontroller: UIViewController, TimingDelegate
তারপরে আপনার ক্লাসে যুক্ত করুন:
var _TICK: Date?
আপনি যখন কিছু সময় দিতে চান, তখন এটি দিয়ে শুরু করুন:
TICK
এবং এর সাথে শেষ:
TOCK("Timing the XXX routine")