PDA

View Full Version : رفع مشکل پیغام اجرای طولانی مدت



Mahdi_110
سه شنبه 21 دی 1395, 23:42 عصر
سلام
در برنامه بدلیل اجرای چند حلقه و عملی نمودن فرآیند جستجو مدت زمان انجام زیاد طول میکشد .
حدود 5 دقیقه .
در حال اجرای برنامه با این پیغام زیر روبرو میشویم .

The CLR has been unable to transition from COM context 0x2dd2d8 to COM context 0x2dd448 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.


مشکل این هست که میگه زمان اجرا زیاده و ممکن هست فضا اشغال میکنه و .... که با زدن دکمه ادامه رفع میشود .
سئوال :
آیا زمانی که این برنامه را کامپایل کرده و فایل اجرایی درست میشود در سیستم دیگر در زمان اجرا به این پیغام برمیخورد یا چون در برنامه VS داره اجرا میشه این پیغام را میدهد .
آیا راهی هست که در هیمن جا هم چنین پیغامی ندهد .






a[50000,50000];
b[50000,5];
for(int i = 0;i<50000;i++)
{
for(int j = 0; j< 50000;j++)
{
for(int k = 0;k < 50000;k++)
{
if(a[i,j] == b[k,0])
{
...
}
}
}
}

Mahmoud.Afrad
پنج شنبه 23 دی 1395, 12:25 عصر
کد کامل بزارید بتونیم نظر بدیم و تست کنیم. و بگید چه عملیاتی مدنظرتون هست.

windowsyar
پنج شنبه 23 دی 1395, 12:26 عصر
اگر از بک گراند ورکر استفاده کنید مشکلی نخواهید داشت.

Mahdi_110
پنج شنبه 23 دی 1395, 22:16 عصر
سلام
جستجوی خط به خط در فایل تکست .
ابتدا فایل را خوانده و در آرایه قرار میدهیم .
سپس جستجو مینیم که ایا این کاراکتر در آرایه هست یا خیر در صورت مثبت بودن با در همان قسمت در فایل دیگری مینویسیم یا در ارایه دیگری قرار میدخیم و سپس در قطعه کد دیگری در فایل تکست وارد مینماییم .



a[50000,50000];

b[50000,5];

c[50000,2];

int count = 0

for(int i = 0;i<50000;i++)

{
count = 0;
for(int j = 0; j< 50000;j++)

{

for(int k = 0;k < 50000;k++)

{

if(a[i,j] == b[k,0])

{
writefile.write(b[k,1]);
or
c[count,0] = b[k,1];
count++;
}

}

}
writefile.write("\n");

}