একটি আনলাইন বাইট [] 'গুলি যে স্বয়ংক্রিয়ভাবে একটি। নেট সকেট সার্ভার পিনড ছিল

আমি একটি অ্যাসিঙ্ক্রোনাস সকেট সার্ভার আছে। আমি একটি সমস্যা সম্মুখীন যেখানে সমস্যাযুক্ত ক্লায়েন্ট এবং নেটওয়ার্ক ইভেন্ট পুনঃপ্রতিষ্ঠার কঠিন একটি প্যাড সংখ্যা [] 'গুলি পিঁকা পেতে কারণ যেহেতু সব থ্রেডিং ক্লায়েন্ট হ্যান্ডেলটি অন্তর্নিহিত (আমি BeginAcceptClient ব্যবহার করি, এবং আমি থ্রেডগুলির পরিবর্তে কলব্যাক ব্যবহার করি যা স্পষ্টভাবে ইঙ্গিত করা হয়) আমি পাইিন প্রক্রিয়াটি নিয়ন্ত্রণ করি না। "অন্তর্নিহিত থ্রেডিং" দ্বারা আমি বুঝি যে থ্রেড আমার দ্বারা সরাসরি উত্পন্ন হয় না, কিন্তু রানটাইম দ্বারা আমার অ্যাপ্লিকেশন হোস্টিং দ্বারা।

যেকোনো হারে এই পোস্টে বস্তুগুলি আনপিন করা দেখায়। আমি এগিয়ে যান এবং আমার বাইট আঁকা যদি আমি আঁটসাঁট পর্দার পিছনে অগ্রাহ্য করা সম্ভব [] 'গুলি নিজেকে, BeginRead করতে পারেন এবং পরিচ্ছন্নতা সময় আনপিন?

ধন্যবাদ।

2
যোগ সম্পাদিত
মতামত: 1

2 উত্তর

আপনি লিঙ্ক পোস্টে উত্তর সম্পূর্ণ ভুল (আমি এখানে একটি মন্তব্য বাকি)। শুধুমাত্র যখন শেষ পিন করা হ্যান্ডেল (আরো সাধারণ: পিন করা "কারণ" কারণ GCHandles এর থেকে অন্য কারণ আছে) সরানো হয় বস্তু unpinned হয়। আপনি আনপিন করা জোর করতে পারবেন না এটা ভয়ঙ্কর অসুরক্ষিত হবে। আপনি নিরাপদ পরিচালিত কোড ব্যবহার করতে পারেন যাতে নিরাপত্তার সমস্যা হয় এমন অনিরাপদ জিনিসগুলি করতে পারেন!

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

সমাধান অন্যত্র:

  1. অ্যাপ্লিকেশন প্রারম্ভে সমস্ত বাফার তৈরি করুন যাতে সমস্ত বাফার মেমরিতে সংলগ্ন হয়। একটি বাফার পুল ব্যবহার করুন।
  2. অল্প সংখ্যক বড় বাফার ব্যবহার করুন এবং পৃথক ক্লায়েন্টদের কাছে এটির বিভাগগুলি বরাদ্দ করুন।

একটি ছোট পার্শ্ব নোট: আপনি কি মনে করেন পিনিং আলাদাভাবে প্রয়োগ করা হয়। পিনিং একটি পতাকা না আপনি একটি বস্তুর চালু এবং বন্ধ করতে পারেন। যখন আপনি কিছু পিন করুন, কিছুই বিশেষ প্রথম না। শুধুমাত্র যখন জি সি রান করে, তখন জি.সি. নোটিশ দেয় যে, তারা বিশেষ পিনিংয়ের সাথে রেফারেন্স রয়েছে। এটি বস্তুটিকে স্থানান্তরিত হতে বাধা দেয়।

4
যোগ
অান্তরিক ধন্যবাদ.
যোগ লেখক kmarks2, উৎস

আমি সুপারিশ করব যে পিন/আনপিনে ফোকাস করার পরিবর্তে আপনার সমস্ত সকেট একটি পৃথক অ্যাপডোমাইন থেকে কল করুন। আপনি তখন, যখন আপনি 'নিষ্ক্রিয়/নিরাপদ' বিন্দুতে থাকবেন, তখন অ্যাপডোমাইনটি একটি ভালো অবস্থাতে মেমরি রিসেট করতে আনলোড এবং পুনরায় লোড করবে।

1
যোগ
তিনি শুধু একটি ম্যানুয়াল জি সি করতে পারেন যা সমস্ত অব্যবহৃত বাফারও পরিষ্কার করতে পারে। একটি অ্যাপডমেন বন্ধ করার ফলে জি.সি. সংক্রান্ত কোন নতুন ক্ষমতা যুক্ত হয় না। জি সি প্রক্রিয়া-বিশ্বব্যাপী।
যোগ লেখক usr, উৎস
আপনি হ্যান্ডেল লিক আছে অনুমান করা হয়। বিসিএল সকেট বাস্তবায়নের কোনো নিশ্চয়তা নেই, এবং তিনি নিজে কোনও পিনিং করছেন না। যাইহোক, এ্যাপোডাইমটি বন্ধ করে সকেট সংযোগ বিচ্ছিন্ন করে।
যোগ লেখক usr, উৎস
জি সি প্রক্রিয়া-বিশ্বব্যাপী, কিন্তু AppDomain সাফ করা সেই ডোমেনে আইটেমের সমস্ত চূড়ান্তকরণকারীকে কল করবে; যার মধ্যে একটি, আশা, GCHandle যে এখনও বাফার ধরে রাখা হয় বিনামূল্যে কল করতে পারে। এটি প্রশ্নে কোডের উপর নির্ভর করে, কিন্তু GC এর পরবর্তী শুঁটির উপর সংগ্রহ করার জন্য এটি অ্যারে মুক্ত করতে পারে
যোগ লেখক GWLlosa, উৎস
আমি রাজী; অ্যাপটি বন্ধ করা ডোমেইন সকেটটি সংযোগ বিচ্ছিন্ন করবে। কিন্তু কেউ আলিঙ্গন করা আবশ্যক; যেহেতু মেমরি আনপিন করা অন্য কেউ পিন করা কঠিন/ত্রুটিপূর্ণ প্রবণ, আমি মনে করি আপনি পেতে পারেন AppDomain পরিষ্কার করতে অন্য কেউ বাফার পরিষ্কার করার জন্য আরও ভাল অবস্থানে আছে আশা করি। এই বাফার আপনার নিয়ন্ত্রণ অধীনে হয় না অনুমান করা হয়।
যোগ লেখক GWLlosa, উৎস