আইওএস বিকাশ: আমি কীভাবে ডিভাইসে স্বল্প স্মৃতি সতর্কতা প্ররোচিত করতে পারি?


93

আমি আমার অ্যাপ্লিকেশনটির কার্যকারিতা কম মেমরির পরিস্থিতিতে ভালভাবে পরীক্ষা করতে চাই, তবে এটি পরীক্ষা করা কঠিন। সিমুলেটরটি নয়, যখন অ্যাপ্লিকেশনটি ডিভাইসে চলছে তখন আমি কীভাবে কম মেমরির সতর্কতাগুলিকে প্ররোচিত করতে পারি যা আমার দৃষ্টিভঙ্গিতে didReসেপ্ট মেমোরি ওয়ার্নিং পদ্ধতিটি ট্রিগার করে? বা এই সম্ভাব্য শর্তগুলির মধ্যে আমি আমার অ্যাপ্লিকেশনটি পরীক্ষা করতে পারি এমন কিছু উপায় কী?

যে কারণে আমি সিমুলেটরটি ব্যবহার করতে পারি না তা হ'ল আমার অ্যাপ্লিকেশনটি গেম সেন্টার ব্যবহার করে এবং আমন্ত্রণ জানায় যে সিমুলেটরটিতে কাজ করে না।

উত্তর:


9

একটি ডিভাইস পরীক্ষা করার জন্য, কেবলমাত্র এমন কিছু কোড যুক্ত করুন যা পর্যায়ক্রমে বড় মাপের মেমরিটি বিনামূল্যে না ছাড়িয়ে বরাদ্দ করে (অর্থাত্ উদ্দেশ্য হিসাবে ফাঁস)। আপনি এটি একটি আলাদা থ্রেডে বা টাইমার প্রতিক্রিয়া হিসাবে বা আপনার অ্যাপ্লিকেশনটির আচরণটি পরীক্ষা এবং পর্যবেক্ষণ করতে সর্বোত্তম মঞ্জুরি দেয় এমন কোনও প্রক্রিয়া ব্যবহার করে করতে পারেন।

আপনি পৃথক অ্যাপ তৈরি করতেও পছন্দ করতে পারেন যা একই রকম কিছু করে এবং পটভূমিতে চালানোর জন্য ডিজাইন করা হয়েছে, যদি আপনি সহজেই এটি পুনরায় ব্যবহার করতে চান এবং / অথবা একাধিক অ্যাপ্লিকেশন দিয়ে পরীক্ষা করতে পারেন।


7
খুব ব্যবহারিক না। পরীক্ষার জন্য একটি ব্যক্তিগত পদ্ধতিতে কল করার সমাধানটি আরও ভাল
ডাইজ-দাজন

4
আপনি বাস্তব বিশ্বের পরিস্থিতি দেখতে চাইলে একটি ভাল সমাধান নয়। মেমরির চাপের কারণে নয় এমন ফুটো হওয়ার কারণে আপনি অ্যাপটি বিকল করছেন। এটি খারাপ যেহেতু আপনি যা করতে চান তা হ'ল অ্যাপটি উচ্চ মেমরির চাপের স্থানে কীভাবে প্রতিক্রিয়া জানায় তা পরীক্ষা করা। সমস্যাটি সত্যিকারের ফাঁস বা আপনি যে নকলটি পরিচয় করেছিলেন তা কী তা নির্ধারণ করা শক্ততর হিসাবে On নীচের মত পরীক্ষার জন্য ব্যক্তিগত পদ্ধতি এক ভাল better
fzaziz

4
এই উত্তরটি হ্রাস করা উচিত নয়, কারণ দ্বিতীয় অনুচ্ছেদটি আসলে অ্যাপল যা করতে বলেছে তা যদি আপনি নিজের অ্যাপ্লিকেশনটির আচরণ পরীক্ষা করতে চান যখন মেমরিটি সত্যই কম হয়।
ম্যাট

4
এই বরাদ্দটি সম্পাদনের জন্য একটি কোড ব্লকের সাথে উত্তরটি উন্নত হবে!
পেকম্ব

যদিও এটি সেটআপ করতে আরও বেশি কাজ নেয়, এটি ব্যক্তিগত পদ্ধতি কল করার চেয়ে আরও বাস্তবসম্মত পরীক্ষা। সত্যিই যখন সমালোচনামূলক মেমরির চাপ থাকে তখন আপনার অ্যাপ্লিকেশনটি আপনি এটি করতে বলার মতো ক্রিয়াগুলি সম্পাদন করতে সক্ষম হবে? এবং এই ক্রিয়াগুলি পরিস্থিতি উপশম করবে বা আরও খারাপ করবে এবং আইওএসকে এটি বন্ধ করে দেবে? এছাড়াও, DISPATCH_SOURCE_TYPE_MEMORYPPressures পরীক্ষা করার জন্য ব্যক্তিগত পদ্ধতিটি কাজ করে না।
jk7

279

আপনি ব্যক্তিগত পদ্ধতিতে কল করতে পারেন :

[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];

এটি কেবলমাত্র ডিবাগ-এ ব্যবহার করা মনে রাখবেন, নাহলে আপনার অ্যাপ্লিকেশনটি প্রত্যাখাত হবে।


6
এই কোডটি ডিভাইসে মেমরি সতর্কতার সঠিকভাবে অনুকরণ করে appears ধন্যবাদ এনজো!
উইলিয়াম ডেনিস

29
কোডে এটি ব্যবহার না করে এটি ডিবাগারে চালিত করুন। কেবল বিরতি দিন এবং প্রবেশ করুনpo [[UIApplication sharedApplication]performSelector:@selector(_performMemoryWarning)]
অরকোডেন

17
পো ব্যবহারের পরিবর্তে এক্সপ্রেস ব্যবহার করুন, অর্থাৎexpr (void)[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
অ্যান্ডি

12
ডিবাগারে, আপনাকে শিরোনাম না দেওয়ার জন্য workaround ব্যবহার করার দরকার নেই:expr (void)[[UIApplication sharedApplication] _performMemoryWarning]
অরেঞ্জডগ

4
যে কেউ সুইফট দিয়ে এটি করতে চাইছেন: expr UIApplication.sharedApplication().performSelector("_performMemoryWarning")সাধারণ ব্যবহারের পরিবর্তে টাইপ করুন#selector
funct7

30

আইওএস সিমুলেটারের Simulate Memory Warningমেনু আইটেম আপনাকে একটি মেমরি সতর্কতা সরাতে দেয়।


ডিভাইসে এটি পরীক্ষা করার একমাত্র উপায় হ'ল এটি আসলে জোর করা, অর্থাত্ দীর্ঘ সময় বা নিবিড় চিত্রগুলির জন্য অ্যাপ্লিকেশন ব্যবহার করে বা আপনার কাছে যা কিছু রয়েছে অ্যাপ্লিকেশনটিতে পরিবর্তিত হবে। আপনাকে সতর্কতাটি দ্রুত পেতে সহায়তা করতে কোনও আইফোন 4 এর পরিবর্তে কোনও পুরানো ডিভাইস (3 জি সম্ভবত?) ব্যবহার করার পরামর্শ দেওয়া হতে পারে।
জেসি নওহর

ধন্যবাদ, জেসি, আমি মনে করি আমি আমন্ত্রণগুলি সাদৃশ্য করতে আমার অ্যাপ্লিকেশনটিতে কিছু হ্যাক যুক্ত করব যাতে আমি এটিকে সিমুলেটারে চালাতে পারি এবং সেইভাবে মেমরির সতর্কতাগুলিকে প্ররোচিত করতে পারি।
সৈকত রুনারফ্রেড 20

10
প্রশ্নটি ছিল ডিভাইসে সিমুলেশন সম্পর্কে।
কেপিএম

20

ইনস্ট্রুমেন্টস ব্যবহার করে মেনু আইটেমটি ব্যবহার করুন: উপকরণ -> মেমরি সতর্কতা সিমুলেট করুন।

এক্সকোড থেকে আপনার অ্যাপে সরঞ্জাম ব্যবহার করতে পণ্য -> প্রোফাইল মেনু আইটেমটি ব্যবহার করুন।


@ ওরেঞ্জডগ কী হচ্ছে?
থমাসডাব্লু

4
যাইহোক কিছুই না. আমি যখন এনজোর উত্তর দর্শনগুলি ব্যবহার করি তখন তাদের কাছে ফিরে আসার পরে পুনরায় লোড করতে হয়, এই পদ্ধতিটি ব্যবহার করে না।
অরেঞ্জডগ

12

আমি সুইফটে এনজো ট্রানের উত্তরটি আবার লিখেছি :

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)

ধন্যবাদ! এক্সকোড "অবজেক্টিভ সি সিলেক্টারের সাথে কোনও পদ্ধতি ঘোষিত নয়" সম্পর্কে সতর্ক করে, তবে এটি কাজ করেও।
man1

10

যদি কেউ, যে কোনও কারণে, সুইফ্ট 4 এ এটি করার চেষ্টা করে - এখানে 1.2 গিগাবাইট র‌্যাম বরাদ্দ করা যায়।

let d = Data.init(repeating: 100, count: 1200000000)
  • অন্যান্য অ্যাপ্লিকেশনগুলিতে সতর্কতা সতর্কতা ট্রিগার করতে এটি সহায়ক

এর মতো এমন কিছু করা কি আমি ইনস্ট্রুমেন্টগুলিতে দেখার চেষ্টা করছি এমন সত্যিকারের মেমরির তথ্যকে বিস্মৃত করে? যদিও আমি দেখতে পাচ্ছি কোনও দৈহিক ডিভাইসে এটি করার উপযুক্ত কোনও উপায় নেই, তবে আমার অ্যাপটি যদি আমার অ্যাপ্লিকেশনটির মধ্যে আমার স্মৃতিশক্তি গ্রহণ করছে তা যদি দেখতে হয় তবে মনে হয় এটি সমস্ত ডেটা স্কু করে চলেছে এবং আমি করব না আর আপেক্ষিক উত্তর আছে। আমি এখনও তা দেখতে পাবে গ্রহণ করা হয় আরো , কিন্তু না সত্য অনুপাত।
জ্যাক টি।

এটি অবিলম্বে ক্র্যাশ হয়েছে
ড্যানিয়েল স্প্রিঞ্জার

8

@ শিখাবুজেড 3-এ দ্রুত রূপান্তরিত হয়েছে:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)

7

একটি মেনু কমান্ড রয়েছে যা এটি শুরু করবে inv

Hardware > Simulate Memory Warning সিমুলেটর থেকে


8
প্রশ্নটি ছিল ডিভাইসে সিমুলেশন সম্পর্কে।
কেপিএম

4
এক্সকোড 10 এ এটি এখন ডিবাগ> সিমুলেট মেমরি সতর্কতার অধীনে।
সেব্বো

4

যদি কেউ, যে কোনও কারণে, সুইফ্ট 3-এ এটি করার চেষ্টা করে - এখানে 1.2 গিগাবাইট র‌্যাম বরাদ্দ করা যায়।

   for i in 0...1200 {
      var p: [UnsafeMutableRawPointer] = []
      var allocatedMB = 0
      p.append(malloc(1048576))
      memset(p[allocatedMB], 0, 1048576);
      allocatedMB += 1;
   }

4
আসুন d = Data.init (পুনরাবৃত্তি: 100, গণনা: 1200000000)
ব্লেজেজ SLEBODA

4
@ অ্যাডোবেলগুলি আপনার উত্তর হিসাবে পোস্ট করা উচিত :)
কোয়েন।

1

সুইফট 4:

ইউআইএএপ্লিকেশন.শেকার্ড. পারফর্ম (নির্বাচক (("_ পারফরম্যান্স ওয়ার্মিং")))

কোনও ইভেন্ট / বিজ্ঞপ্তির প্রতিক্রিয়া হিসাবে উপরেরটি সম্পাদন করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.