[DllImport("USER32.DLL", CharSet = CharSet.Auto)]
internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
"Save Table".hWndByTitle().setTitle(csvDlg).waitForIdle().sendString(
new string[] {
"DUIViewWndClassName",
"DirectUIHWND",
"FloatNotifySink",
"ComboBox",
"Edit" },
csv);
internal static IntPtr sendString(this IntPtr hWnd, string[] classNames, string msg, bool verb = false)
{
var hCtrl = hWnd;
if (classNames != null && classNames.Count() > 0)
{
Thread.Sleep(to[toFileStdDlg]);
foreach (var c in classNames)
{
Thread.Sleep(to[toFileStdDlg]);
hCtrl = user32.FindWindowEx(hCtrl, IntPtr.Zero, c, null);
if (hCtrl.Equals(IntPtr.Zero))
{
$"\tERROR :: sendString not found class {c}".log();
return hWnd;
}
else
hCtrl.waitForIdle();
}
}
for (int i = 0; i < msg.Length; i++)
user32.PostMessage(hCtrl, WM_CHAR, msg[i], 0);
Thread.Sleep(to[toFileStdDlg]);
user32.PostMessage(hWnd, WM_KEYDOWN, user32.VkKeyScan('\r'), 0);
user32.PostMessage(hWnd, WM_KEYUP, user32.VkKeyScan('\r'), 0);
return hWnd;
}
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[] data = new int[128];
/// init data
int[] marker = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; // фикция.. но и работа бесплатная
bool marker_present = default;
for (var i = 0; i < data.Length - marker.Length; i++) // data.Length-marker.Length важно, иначе можете получить вылет за границы диапазона
{
marker_present = true;
for (var j = 0; j < marker.Length; j++)
if (data[i + j] != marker[j])
{
marker_present = false;
break;
}
}
Console.WriteLine($"marker_present = {marker_present.ToString().ToUpper()}");
}
}
}
internal static void log(this string txt) => tbLog.AppendText(txt + Environment.NewLine);
$"что то прошло не так, параметры первый {x} и второй {y}".log();
#if DEBUG
var sw = new Stopwatch();
sw.Start();
#endif
/// что то делаем
#if DEBUG
sw.Stop();
var ts = sw.Elapsed;
$"total time '{name_of_action}':".log();
$"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}".log();
#endif
File.Delete(path);
foreach (var f in Directory.EnumerateFiles(path, "*.*"))
File.Delete(f);
File.Delete(Directory.EnumerateFiles(path, "*.*")[0]);
Directory.Delete(path, true);
using System;
на скрине выделено это значит что библиотека не подключается реально. вот если в узле References все зачистить, возможно будет именно такой эффект static void buildLinks(this IEnumerable<string> profiles, string bro)
{
try
{
dynamic sh = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")));
var successCount = 0;
foreach (var p in profiles)
{
var pl = p.Split(backSlashDelimiter, StringSplitOptions.RemoveEmptyEntries);
var pnPoint = pl.Length - 2;
var profileName = pl[pnPoint];
var profileLocation = new StringBuilder()
.Append("%APPDATA%").Append(backSlash)
.Append(pl[pnPoint - 3]).Append(backSlash)
.Append(pl[pnPoint - 2]).Append(backSlash)
.Append(pl[pnPoint - 1]).Append(backSlash)
.ToString();
try
{
dynamic lnk = sh.CreateShortcut(linkLocation + profileName + ".lnk");
lnk.TargetPath = bro;
lnk.Arguments = ffOptions + " " + profileLocation + profileName;
lnk.WorkingDirectory = profileLocation;
lnk.IconLocation = iconLocation + iconName + ", " + iconIndex;
lnk.Description = "created by ff.links on C#";
lnk.Save();
" .. created link for profile ".print(pfx, profileName);
successCount++;
}
catch (Exception e) { $"FAIL create link for profile {profileName} - {e.Message}".print(pfx); }
}
$"total created links {successCount}".print(pfx);
}
catch (Exception e) { $"FAIL 'build links' - {e.Message}".print(pfx); }
}
Console.WriteLine((1.0 / 7).ToString());
Console.WriteLine((1 / 7.0).ToString());
Console.WriteLine((1f / 7).ToString());
Console.WriteLine((1 / 7d).ToString());
Console.WriteLine((((double)1) / 7).ToString());
Console.WriteLine((1 /((float)(7))).ToString());
Console.WriteLine(((float)(1 / 7)).ToString("0.##"));
Давно я конечно не писал на C#..
..или изменилась правила деления?
В сайт заходит в 50000 человек в деньа это уже вопрос к железу, а еще он зависит от архитектуры самомго приложения, и от архитектуры базы. оценить железо без нагрузочного тестирования невозможно
что бы подробнее спрашиватьскорее всего надо нанимать специалиста, это уже на площадки фриланса
Соответственно, я могу сделать метод и сам класс статическим(и иметь красивый код) или не делать(и каждый раз создавать экземпляр класса, чтобы вызвать метод) .и у вас будет один экземпляр класса. далеко не всегда это уместно. большинство прикладных задач, требует множества экземпляров различных классов
Есть ли у статического варианта какие-то подводные камни, например, при вызове из нескольких потоков?у методов может и нет, зависит о того к чему они обращаются? если вызываете другие потокобезопасные методы (библиотечных классов) + изучите и будете применять потокобезопасные алгоритмы - какие могут быть проблемы? (пример - расширения LINQ, который вообще почти полностью на расширениях то и построен (то есть в основном на статических методах))