() স্কেল সংযোগগুলি নিষ্পত্তি না করা ঠিক কতটা খারাপ?


14

ব্যক্তিগতভাবে, আমি যদি বিবরণী ব্যবহারের ক্ষেত্রে আইডিজিপোজেবল বাস্তবায়নকারী ADO অবজেক্টগুলি না রাখি তবে আমি মাতালগুলিতে ছড়িয়ে পড়ি। তবে আমার বর্তমান চুক্তিতে, আমি দেখতে পেয়েছি যে তাদের জন্মভূমি এন্টারপ্রাইজ কাঠামো "ডেটা অ্যাক্সেস প্রদানকারী" কোড 1) আইডিস্পোজেবল বাস্তবায়ন করে না এবং 2) যে কোনও সময়ে, যে কোনও সময়ে, ডিসপোজ () কল করে। ব্যবহারকারীরা উইনফর্ম অ্যাপ্লিকেশনগুলিতে কর্মক্ষমতা সম্পর্কিত সমস্যাগুলির বিষয়ে প্রচুর অভিযোগ করে যা ডেটা অ্যাক্সেসের জন্য এই কাঠামোটি ভারীভাবে ব্যবহার করে এবং কোডে আরও অনেক সমস্যা রয়েছে যা পারফরম্যান্সকে মারাত্মকভাবে প্রভাবিত করতে পারে, তবে এটি কেবল আমার দিকে চিত্কার করে এবং আরও বেশি অন্যের চেয়ে কম ঝুলন্ত ফল।

সুতরাং, "নিষ্পত্তি করার কারণ আছে বলে কিছু বলার বাইরেও এটি ব্যবহার করুন," আমি এই লোকগুলিকে বোঝাতে কী বলতে পারি যে এটি সত্যই, সত্যই খারাপ?


5
হি .. আমার ধারণা যে, কোনও এক সময় দৃinc় বিশ্বাসের প্রয়োজন হবে না :)
ডাঃ হ্যানিবাল লেস্টার

উত্তর:


6

আমি বলতে চাই যে আপনি সবচেয়ে ভাল করতে পারেন তা এখানে মাইক্রোসফ্টের প্যাটার্নস এবং অনুশীলনগুলিতে নির্দেশ Dispose() করুন । তাদের সামনে ঠিক এই সরঞ্জামটি ব্যবহার না করার পুরো পরিণতি তাদের দেখতে দিন।


1
কেবলমাত্র আমি এমন একটি সংস্করণ পেলাম যা শীর্ষে "এই অবসরপ্রাপ্ত সামগ্রী" না বলে চিৎকার করবে।
এজে জনসন

তুমি জানো, আমার চোখ কেবল তার দিকেই তাকিয়ে আছে। তবে এখন এটি মনোযোগ সহকারে পড়ে, আমি অবাক হয়ে দেখি যে লোকেরা সেই পৃষ্ঠা থেকে অবসরপ্রাপ্ত "প্রযুক্তি এখনও ব্যবহার করছে" might হয়তো সিএএস?
জেসি সি স্লিকার

এটি আরও ঘনিষ্ঠভাবে স্ক্যান করা, এর বেশিরভাগটি এখনও আমার কাছে প্রাসঙ্গিক বলে মনে হয়। এটি কেন অবসরপ্রাপ্ত হিসাবে চিহ্নিত হয়েছে তা নিশ্চিত নয়।
এজে জনসন

10

আপনি যদি কোনও এসকিউএল সংযোগে ডিসপোজ পদ্ধতিতে কল না করেন, আপনি এটি ব্যবহার করার পরে, সেই সংযোগটি সংযোগ পুলে ফিরে ফিরে আসবে না।

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

মাইক্রোসফ্টের সেরা অনুশীলনটি আপনাকে আপনার সংযোগ কোডটি ইউজিং স্টেটমেন্টের ভিতরে রাখার আহ্বান জানিয়েছে, সংযোগটি নিষ্পত্তি হয়েছে এবং এই সংযোগটি পুলটিতে ফিরে আসবে তা নিশ্চিত করে।


কলিংটি Closeসংযোগ পুলে ফিরে যেতে যথেষ্ট। প্রশ্নটি উল্লেখ করে না যা স্পষ্টভাবে ব্যবহৃত Closeহয় না ।
ব্যবহারকারী 2864740

9

ডাটাবেস সংযোগ পুলটি আকারে সীমিত, এবং যদি এটি পূরণ করে তবে নতুন সংযোগগুলি পুরানো সংযোগগুলি প্রকাশের জন্য অপেক্ষা করবে। আপনি তাদের সাথে শেষ হওয়ার সাথে সাথে এগুলি নিষ্পত্তি না করে, চূড়ান্ত পর্বে চালানো হলে তারা অবশেষে মুক্তি পাবেন, তবে ভবিষ্যতে এটি একটি অনির্দিষ্ট সময়ের জন্য ... সুতরাং সর্বোত্তম, আপনি যাচ্ছেন নতুন সংযোগ খোলার সময় দীর্ঘ বিলম্ব দেখুন।

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

এই সমস্ত সমস্যার সমাধান করার সঠিক উপায় হ'ল আপনার সংযোগটি শেষ হওয়ার সাথে সাথে তা নিষ্পত্তি করা। সর্বোত্তম ধারণা হ'ল সংযোগটি যতটা প্রয়োজন ঠিক ততক্ষণ ধরে রাখা, আর আর থাকবে না।


1
এটি এর চেয়ে কিছুটা খারাপ even যদি পুলটি যথেষ্ট ব্যাক আপ হয়ে যায় তবে ম্যানেজমেন্ট সরঞ্জাম থেকে সংযোগের প্রচেষ্টা সহ অনেকগুলি সংযোগ প্রচেষ্টা শেষ পর্যন্ত কেবল ব্যর্থ হয়ে যায় এবং আপনি আমাদের কার্যকরভাবে ডাটাবেসটিকে লক করতে পারেন।
জোয়েল কোহোর্ন

3

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

~Object()
{
    this.Dispose(false);    
}

public void Dispose()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    // ...
}

System.Data.SqlClient.SqlConnectionউদাহরণস্বরূপ নিন :

সিস্টেম.কম্পোনেন্টমোডেল.কম্পোনেন্ট <- চূড়ান্ত নিষ্পত্তি প্যাটার্নকে কার্যকর করে।
    |
System.Data.Common.DbConnection
    |
System.Data.SqlClient.SqlConnection

অবশেষে অবজেক্টগুলি নিষ্পত্তি করা হবে তবে অ-নিরস্তাত্মক প্রকৃতির কর্মক্ষমতা হ্রাস পেয়েছে।


0

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

আমি ধরে নিচ্ছি খ) আপনি যে পারফরম্যান্স হিট করছেন তার কারণে। তবে সম্ভবত এটিই একমাত্র কারণ নয়।

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

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