Here are the examples of the csharp api System.GC.Collect() taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
1893 Examples
19
Source : MelonMain.cs
with GNU General Public License v3.0
from 1330-Studios
with GNU General Public License v3.0
from 1330-Studios
internal IEnumerator GCTime() {
RuntimeHelpers.PrepareConstrainedRegionsNoOP();
while (true) {
long mem = Profiler.GetMonoUsedSizeLong();
yield return new WaitForSeconds(15f);
System.GC.Collect();
GarbageCollector.CollectIncremental(0);
long dif = mem - Profiler.GetMonoUsedSizeLong();
MelonLogger.Msg($"{Math.Abs(dif/1024/1024)}MB collected");
lastFrameMemory = mem;
}
}
19
Source : AssetManager.cs
with MIT License
from 404Lcc
with MIT License
from 404Lcc
public void UnloadAllreplacedets()
{
foreach (replacedetData item in replacedetDict.Values)
{
Unloadreplacedet(item);
}
Resources.UnloadUnusedreplacedets();
replacedetDict.Clear();
GC.Collect();
}
19
Source : UMAGeneratorBuiltin.cs
with Apache License 2.0
from A7ocin
with Apache License 2.0
from A7ocin
void Update()
{
if (CheckRenderTextures())
return; // if render textures needs rebuild we'll not do anything else
if (forceGarbageCollect > garbageCollectionRate)
{
GC.Collect();
forceGarbageCollect = 0;
if (garbageCollectionRate < 1) garbageCollectionRate = 1;
}
else
{
Work();
}
}
19
Source : ThroughputToFileBench.cs
with MIT License
from Abc-Arbitrage
with MIT License
from Abc-Arbitrage
public static void Run()
{
var dir = Path.GetFullPath(Guid.NewGuid().ToString());
Directory.CreateDirectory(dir);
try
{
Console.WriteLine("Initializing...");
BasicConfigurator.Configure(
new ZeroLogBasicConfiguration
{
Appenders = { new DateAndSizeRollingFileAppender(Path.Combine(dir, "Output")), },
LogEventQueueSize = 1000 * 4096 * 4,
LogEventPoolExhaustionStrategy = LogEventPoolExhaustionStrategy.WaitForLogEvent
}
);
var log = LogManager.GetLogger(typeof(ThroughputToFileBench));
var duration = TimeSpan.FromSeconds(10);
Console.WriteLine("Starting...");
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var sw = Stopwatch.StartNew();
long counter = 0;
while (sw.Elapsed < duration)
{
counter++;
log.Debug().Append("Counter is: ").Append(counter).Log();
}
Console.WriteLine($"Log events: {counter:N0}, Time to append: {sw.Elapsed}");
Console.WriteLine("Flushing...");
LogManager.Shutdown();
Console.WriteLine($"Time to flush: {sw.Elapsed}");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Directory.Delete(dir, true);
}
Console.WriteLine("Done");
}
19
Source : OVROverlaySample.cs
with MIT License
from absurd-joy
with MIT License
from absurd-joy
void ClearObjects()
{
for (int i = 0; i < spawnedCubes.Count; i++)
{
DestroyImmediate(spawnedCubes[i]);
}
spawnedCubes.Clear();
GC.Collect();
}
19
Source : Navigator.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
public void GoBack()
{
var lastExampleView = _currentExample;
_history.Undo();
if (_history.Current is Example example)
{
Navigate(example);
ServiceLocator.Container.Resolve<IModule>().CurrentExample = example;
}
else
{
Navigate((Guid)_history.Current);
}
ServiceLocator.Container.Resolve<IExampleViewModel>().BreadCrumbViewModel.IsShowingBreadcrumbNavigation = false;
ServiceLocator.Container.Resolve<IExampleViewModel>().ExportExampleViewModel.IsExportVisible = false;
GoBackCommand.RaiseCanExecuteChanged();
GoForwardCommand.RaiseCanExecuteChanged();
NavigateToHomeCommand.RaiseCanExecuteChanged();
if (CurrentExample is ExampleAppPage lastExamplePage)
{
// Required to release memory from last example
lastExamplePage.ViewModel = null;
}
if (lastExampleView != null)
{
lastExampleView.View = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
19
Source : Navigator.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
public void GoForward()
{
var lastExampleView = _currentExample;
_history.Redo();
if (_history.Current is Example example)
{
Navigate(example);
ServiceLocator.Container.Resolve<IModule>().CurrentExample = example;
}
else
{
Navigate((Guid)_history.Current);
}
ServiceLocator.Container.Resolve<IExampleViewModel>().ExportExampleViewModel.IsExportVisible = false;
ServiceLocator.Container.Resolve<IExampleViewModel>().BreadCrumbViewModel.IsShowingBreadcrumbNavigation = false;
GoBackCommand.RaiseCanExecuteChanged();
GoForwardCommand.RaiseCanExecuteChanged();
NavigateToHomeCommand.RaiseCanExecuteChanged();
if (CurrentExample is ExampleAppPage lastExamplePage)
{
// Required to release memory from last example
lastExamplePage.ViewModel = null;
}
if (lastExampleView != null)
{
lastExampleView.View = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
19
Source : Navigator.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
private void OnExamplesFrameBeforeNavigation()
{
if (_currentExample != null)
{
_currentExample.View = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
19
Source : Navigator.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
private void GoToHome()
{
var lastExampleView = _currentExample;
Instance.Navigate(AppPage.HomePageId);
_history.Push(AppPage.HomePageId);
ServiceLocator.Container.Resolve<IExampleViewModel>().BreadCrumbViewModel.IsShowingBreadcrumbNavigation = false;
ServiceLocator.Container.Resolve<IExampleViewModel>().ExportExampleViewModel.IsExportVisible = false;
ServiceLocator.Container.Resolve<IMainWindowViewModel>().HideSearchCommand.Execute(null);
// Clears memory on going to home
((TransitioningFrame)_examplesFrame.Frame).SetContentNull();
if (CurrentExample is ExampleAppPage lastExamplePage)
{
// Required to release memory from last example
lastExamplePage.ViewModel = null;
}
if (lastExampleView != null)
{
lastExampleView.View = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
19
Source : TestCase.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
public void Run(Action<double> completed)
{
//Arction added memory garbage collecting
GC.Collect();
GC.WaitForPendingFinalizers();
_speedTest.Execute(_args, _duration, completed);
}
19
Source : MainViewModel.cs
with MIT License
from ABTSoftware
with MIT License
from ABTSoftware
private void TestFinished(TestCase testCase, double result)
{
testCase.Dispose();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
RunNextTest();
}
19
Source : Program.cs
with GNU Affero General Public License v3.0
from ACEmulator
with GNU Affero General Public License v3.0
from ACEmulator
public static void Main(string[] args)
{
var consolereplacedle = $"ACEmulator - v{ServerBuildInfo.FullVersion}";
Console.replacedle = consolereplacedle;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
// Typically, you wouldn't force the current culture on an entire application unless you know sure your application is used in a specific region (which ACE is not)
// We do this because almost all of the client/user input/output code does not take culture into account, and replacedumes en-US formatting.
// Without this, many commands that require special characters like , and . will break
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
// Init our text encoding options. This will allow us to use more than standard ANSI text, which the client also supports.
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
// Look for the log4net.config first in the current environment directory, then in the Executingreplacedembly location
var exeLocation = Path.GetDirectoryName(replacedembly.GetExecutingreplacedembly().Location);
var containerConfigDirectory = "/ace/Config";
var log4netConfig = Path.Combine(exeLocation, "log4net.config");
var log4netConfigExample = Path.Combine(exeLocation, "log4net.config.example");
var log4netConfigContainer = Path.Combine(containerConfigDirectory, "log4net.config");
if (IsRunningInContainer && File.Exists(log4netConfigContainer))
File.Copy(log4netConfigContainer, log4netConfig, true);
var log4netFileInfo = new FileInfo("log4net.config");
if (!log4netFileInfo.Exists)
log4netFileInfo = new FileInfo(log4netConfig);
if (!log4netFileInfo.Exists)
{
var exampleFile = new FileInfo(log4netConfigExample);
if (!exampleFile.Exists)
{
Console.WriteLine("log4net Configuration file is missing. Please copy the file log4net.config.example to log4net.config and edit it to match your needs before running ACE.");
throw new Exception("missing log4net configuration file");
}
else
{
if (!IsRunningInContainer)
{
Console.WriteLine("log4net Configuration file is missing, cloning from example file.");
File.Copy(log4netConfigExample, log4netConfig);
}
else
{
if (!File.Exists(log4netConfigContainer))
{
Console.WriteLine("log4net Configuration file is missing, ACEmulator is running in a container, cloning from docker file.");
var log4netConfigDocker = Path.Combine(exeLocation, "log4net.config.docker");
File.Copy(log4netConfigDocker, log4netConfig);
File.Copy(log4netConfigDocker, log4netConfigContainer);
}
else
{
File.Copy(log4netConfigContainer, log4netConfig);
}
}
}
}
var logRepository = LogManager.GetRepository(replacedembly.GetEntryreplacedembly());
XmlConfigurator.ConfigureAndWatch(logRepository, log4netFileInfo);
if (Environment.ProcessorCount < 2)
log.Warn("Only one vCPU was detected. ACE may run with limited performance. You should increase your vCPU count for anything more than a single player server.");
// Do system specific initializations here
try
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
// On many windows systems, the default resolution for Thread.Sleep is 15.6ms. This allows us to command a tighter resolution
MM_BeginPeriod(1);
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
log.Info("Starting ACEmulator...");
if (IsRunningInContainer)
log.Info("ACEmulator is running in a container...");
var configFile = Path.Combine(exeLocation, "Config.js");
var configConfigContainer = Path.Combine(containerConfigDirectory, "Config.js");
if (IsRunningInContainer && File.Exists(configConfigContainer))
File.Copy(configConfigContainer, configFile, true);
if (!File.Exists(configFile))
{
if (!IsRunningInContainer)
DoOutOfBoxSetup(configFile);
else
{
if (!File.Exists(configConfigContainer))
{
DoOutOfBoxSetup(configFile);
File.Copy(configFile, configConfigContainer);
}
else
File.Copy(configConfigContainer, configFile);
}
}
log.Info("Initializing ConfigManager...");
ConfigManager.Initialize();
if (ConfigManager.Config.Server.WorldName != "ACEmulator")
{
consolereplacedle = $"{ConfigManager.Config.Server.WorldName} | {consolereplacedle}";
Console.replacedle = consolereplacedle;
}
if (ConfigManager.Config.Offline.PurgeDeletedCharacters)
{
log.Info($"Purging deleted characters, and their possessions, older than {ConfigManager.Config.Offline.PurgeDeletedCharactersDays} days ({DateTime.Now.AddDays(-ConfigManager.Config.Offline.PurgeDeletedCharactersDays)})...");
ShardDatabaseOfflineTools.PurgeCharactersInParallel(ConfigManager.Config.Offline.PurgeDeletedCharactersDays, out var charactersPurged, out var playerBiotasPurged, out var possessionsPurged);
log.Info($"Purged {charactersPurged:N0} characters, {playerBiotasPurged:N0} player biotas and {possessionsPurged:N0} possessions.");
}
if (ConfigManager.Config.Offline.PurgeOrphanedBiotas)
{
log.Info($"Purging orphaned biotas...");
ShardDatabaseOfflineTools.PurgeOrphanedBiotasInParallel(out var numberOfBiotasPurged);
log.Info($"Purged {numberOfBiotasPurged:N0} biotas.");
}
if (ConfigManager.Config.Offline.PruneDeletedCharactersFromFriendLists)
{
log.Info($"Pruning invalid friends from all friend lists...");
ShardDatabaseOfflineTools.PruneDeletedCharactersFromFriendLists(out var numberOfFriendsPruned);
log.Info($"Pruned {numberOfFriendsPruned:N0} invalid friends found on friend lists.");
}
if (ConfigManager.Config.Offline.PruneDeletedObjectsFromShortcutBars)
{
log.Info($"Pruning invalid shortcuts from all shortcut bars...");
ShardDatabaseOfflineTools.PruneDeletedObjectsFromShortcutBars(out var numberOfShortcutsPruned);
log.Info($"Pruned {numberOfShortcutsPruned:N0} deleted objects found on shortcut bars.");
}
if (ConfigManager.Config.Offline.PruneDeletedCharactersFromSquelchLists)
{
log.Info($"Pruning invalid squelches from all squelch lists...");
ShardDatabaseOfflineTools.PruneDeletedCharactersFromSquelchLists(out var numberOfSquelchesPruned);
log.Info($"Pruned {numberOfSquelchesPruned:N0} invalid squelched characters found on squelch lists.");
}
if (ConfigManager.Config.Offline.AutoUpdateWorldDatabase)
{
CheckForWorldDatabaseUpdate();
if (ConfigManager.Config.Offline.AutoApplyWorldCustomizations)
AutoApplyWorldCustomizations();
}
else
log.Info($"AutoUpdateWorldDatabase is disabled...");
if (ConfigManager.Config.Offline.AutoApplyDatabaseUpdates)
AutoApplyDatabaseUpdates();
else
log.Info($"AutoApplyDatabaseUpdates is disabled...");
// This should only be enabled manually. To enable it, simply uncomment this line
//ACE.Database.OfflineTools.Shard.BiotaGuidConsolidator.ConsolidateBiotaGuids(0xC0000000, out int numberOfBiotasConsolidated, out int numberOfErrors);
ShardDatabaseOfflineTools.CheckForBiotaPropertiesPaletteOrderColumnInShard();
// pre-load starterGear.json, abort startup if file is not found as it is required to create new characters.
if (Factories.StarterGearFactory.GetStarterGearConfiguration() == null)
{
log.Fatal("Unable to load or parse starterGear.json. ACEmulator will now abort startup.");
ServerManager.StartupAbort();
Environment.Exit(0);
}
log.Info("Initializing ServerManager...");
ServerManager.Initialize();
log.Info("Initializing DatManager...");
DatManager.Initialize(ConfigManager.Config.Server.DatFilesDirectory, true);
log.Info("Initializing DatabaseManager...");
DatabaseManager.Initialize();
if (DatabaseManager.InitializationFailure)
{
log.Fatal("DatabaseManager initialization failed. ACEmulator will now abort startup.");
ServerManager.StartupAbort();
Environment.Exit(0);
}
log.Info("Starting DatabaseManager...");
DatabaseManager.Start();
log.Info("Starting PropertyManager...");
PropertyManager.Initialize();
log.Info("Initializing GuidManager...");
GuidManager.Initialize();
if (ConfigManager.Config.Server.ServerPerformanceMonitorAutoStart)
{
log.Info("Server Performance Monitor auto starting...");
ServerPerformanceMonitor.Start();
}
if (ConfigManager.Config.Server.WorldDatabasePrecaching)
{
log.Info("Precaching Weenies...");
DatabaseManager.World.CacheAllWeenies();
log.Info("Precaching Cookbooks...");
DatabaseManager.World.CacheAllCookbooks();
log.Info("Precaching Events...");
DatabaseManager.World.GetAllEvents();
log.Info("Precaching House Portals...");
DatabaseManager.World.CacheAllHousePortals();
log.Info("Precaching Points Of Interest...");
DatabaseManager.World.CacheAllPointsOfInterest();
log.Info("Precaching Spells...");
DatabaseManager.World.CacheAllSpells();
log.Info("Precaching Treasures - Death...");
DatabaseManager.World.CacheAllTreasuresDeath();
log.Info("Precaching Treasures - Material Base...");
DatabaseManager.World.CacheAllTreasureMaterialBase();
log.Info("Precaching Treasures - Material Groups...");
DatabaseManager.World.CacheAllTreasureMaterialGroups();
log.Info("Precaching Treasures - Material Colors...");
DatabaseManager.World.CacheAllTreasureMaterialColor();
log.Info("Precaching Treasures - Wielded...");
DatabaseManager.World.CacheAllTreasureWielded();
}
else
log.Info("Precaching World Database Disabled...");
log.Info("Initializing PlayerManager...");
PlayerManager.Initialize();
log.Info("Initializing HouseManager...");
HouseManager.Initialize();
log.Info("Initializing InboundMessageManager...");
InboundMessageManager.Initialize();
log.Info("Initializing SocketManager...");
SocketManager.Initialize();
log.Info("Initializing WorldManager...");
WorldManager.Initialize();
log.Info("Initializing EventManager...");
EventManager.Initialize();
// Free up memory before the server goes online. This can free up 6 GB+ on larger servers.
log.Info("Forcing .net garbage collection...");
for (int i = 0 ; i < 10 ; i++)
GC.Collect();
// This should be last
log.Info("Initializing CommandManager...");
CommandManager.Initialize();
if (!PropertyManager.GetBool("world_closed", false).Item)
{
WorldManager.Open(null);
}
}
19
Source : MemoryEventBusProvider.cs
with MIT License
from ad313
with MIT License
from ad313
public void SubscribeQueue<T>(string key, int length, int delay, ExceptionHandlerEnum exceptionHandler, Func<List<T>, Task> handler, Func<Exception, List<T>, Task> error = null, Func<Task> completed = null)
{
if (length <= 0)
throw new Exception("length must be greater than zero");
Subscribe<T>(key, async msg =>
{
if (!IsEnable(key))
{
Console.WriteLine($"{DateTime.Now} 频道【{key}】 已关闭消费");
return;
}
var pages = GetTotalPagesFromQueue(key, length);
var needGc = pages * length > 1000;
while (pages > 0)
{
var data = await GetQueueItemsAsync<T>(key, length);
if (!data.Any())
break;
Exception ex = null;
try
{
await handler.Invoke(data);
}
catch (Exception e)
{
ex = e;
if (await HandleException(key, exceptionHandler, data, e))
{
pages = 1;
return;
}
}
finally
{
if (ex != null && error != null)
await HandleError(key, data, error, ex);
if (completed != null && pages == 1)
await HandleCompleted(key, completed);
}
pages--;
if (pages == 0 && needGc)
{
GC.Collect();
Console.WriteLine("---------------gc-----------------");
}
if (delay > 0)
await Task.Delay(delay);
}
});
}
19
Source : HandleCollector.cs
with GNU General Public License v3.0
from aduskin
with GNU General Public License v3.0
from aduskin
internal void Add()
{
lock (this)
{
_handleCount++;
var performCollect = NeedCollection();
if (!performCollect)
{
return;
}
}
GC.Collect();
var sleep = (100 - _deltaPercent) / 4;
System.Threading.Thread.Sleep(sleep);
}
19
Source : Block.cs
with GNU General Public License v3.0
from aenemenate
with GNU General Public License v3.0
from aenemenate
public Block Copy()
{
using (MemoryStream ms = new MemoryStream())
{
SharpSerializer s = new SharpSerializer(true);
s.Serialize(this, ms);
ms.Position = 0;
Block block = (Block)s.Deserialize(ms);
System.GC.Collect();
return block;
}
}
19
Source : IocScope.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
protected override void OnDispose()
{
if (DisposeFunc != null)
{
foreach (var func in DisposeFunc)
{
try
{
func();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
Local.Value = null;
}
try
{
IocHelper.DisposeScope();
_scope.Dispose();
}
catch (Exception e)
{
Console.WriteLine(e);
}
GC.Collect();
}
19
Source : LogRecorder.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
private static void WriteRecordLoop()
{
bool success = true;
try
{
if (Interlocked.Increment(ref BackIsRuning) > 1)
{
return;
}
SystemTrace(LogLevel.System, "日志开始");
int cnt = 0;
while (State != LogRecorderStatus.Shutdown)
{
//Thread.Sleep(10);//让子弹飞一会
if (State < LogRecorderStatus.Initialized || !BaseRecorder.IsInitialized || !Recorder.IsInitialized)
{
Thread.Sleep(50);
continue;
}
var array = RecordInfos.Switch();
if (array.Count == 0)
{
Thread.Sleep(50);
continue;
}
foreach (var info in array)
{
if (info == null)
continue;
try
{
info.Index = ++_id;
if (_id == ulong.MaxValue)
_id = 1;
if (!_isTextRecorder && (info.Type >= LogType.System || info.Local))
BaseRecorder.RecordLog(info);
if (Listener != null || TraceToConsole)
DoTrace(info);
}
catch (Exception ex)
{
SystemTrace(LogLevel.Error, "日志写入发生错误", ex);
}
}
try
{
Recorder.RecordLog(array.ToList());
}
catch (Exception ex)
{
SystemTrace(LogLevel.Error, "日志写入发生错误", ex);
}
if (++cnt < 1024)
continue;
GC.Collect();
cnt = 0;
}
_syncSlim.Release();
}
catch (Exception e)
{
success = false;
Console.WriteLine(e);
}
finally
{
Interlocked.Decrement(ref BackIsRuning);
SystemTrace(LogLevel.System, "日志结束");
}
if (!success)
NewRecorderThread();
}
19
Source : IZeroObject.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
internal static void OnZeroEnd()
{
RaiseEvent(ZeroNetEventType.AppStop);
using (OnceScope.CreateScope(ZeroObjects))
{
ZeroTrace.SystemLog("[OnZeroEnd>>");
SystemManager.Instance.HeartLeft();
ApplicationState = StationState.Closing;
if (HaseActiveObject)
{
Parallel.ForEach(ActiveObjects.ToArray(), obj =>
{
try
{
ZeroTrace.SystemLog(obj.Name, "*Close");
obj.OnZeroEnd();
}
catch (Exception e)
{
ZeroTrace.WriteException(obj.Name, e, "*Close");
}
});
WaitAllObjectSemapreplaced();
}
GC.Collect();
ApplicationState = StationState.Closed;
ZeroTrace.SystemLog("<<OnZeroEnd]");
}
}
19
Source : IZeroObject.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
internal static void OnZeroDestory()
{
if (!Monitor.TryEnter(ZeroObjects))
return;
ZeroTrace.SystemLog("[OnZeroDestory>>");
RaiseEvent(ZeroNetEventType.AppEnd);
using (OnceScope.CreateScope(ZeroObjects))
{
var array = ZeroObjects.Values.ToArray();
ZeroObjects.Clear();
Parallel.ForEach(array, obj =>
{
try
{
ZeroTrace.SystemLog(obj.Name, "*Destory");
obj.OnZeroDestory();
}
catch (Exception e)
{
ZeroTrace.WriteException(obj.Name, e, "*Destory");
}
});
GC.Collect();
ZeroTrace.SystemLog("<<OnZeroDestory]");
ZeroTrace.SystemLog("[OnZeroDispose>>");
Parallel.ForEach(array, obj =>
{
try
{
ZeroTrace.SystemLog(obj.Name, "*Dispose");
obj.Dispose();
}
catch (Exception e)
{
ZeroTrace.WriteException(obj.Name, e, "*Dispose");
}
});
ZeroTrace.SystemLog("<<OnZeroDispose]");
}
}
19
Source : ZeroStation.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
private void Run()
{
bool success;
using (OnceScope.CreateScope(this, OnRun, OnStop))
{
try
{
success = RunInner(RunTaskCancel.Token);
}
catch (Exception e)
{
ZeroTrace.WriteException(StationName, e, "Run");
success = false;
}
}
if (ZeroApplication.CanDo && !success)
{
//自动重启
ZeroTrace.SystemLog(StationName, "ReStart");
Task.Factory.StartNew(Start);
}
else
{
_waitToken.Release();
}
GC.Collect();
}
19
Source : Tester.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
public void Count()
{
TimeSpan ts = TimeSpan.FromTicks(RunTime);
GC.Collect();
ZeroTrace.SystemLog("Count", ExCount,
$"{ts.TotalMilliseconds / ExCount}ms | {ExCount / (DateTime.Now - Start).TotalSeconds}/s",
"Error", $"net:{NetError:D8} | worker:{WkError:D8} | time out:{TmError:D8} | bug:{BlError:D8}");
}
19
Source : ZeroApplication.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
public static void Shutdown()
{
ZeroTrace.SystemLog("Begin shutdown...");
switch (ApplicationState)
{
case StationState.Destroy:
return;
case StationState.BeginRun:
case StationState.Run:
OnZeroEnd();
break;
case StationState.Failed:
SystemManager.Instance.HeartLeft();
break;
}
ApplicationState = StationState.Destroy;
if (GlobalObjects.Count > 0)
GlobalSemapreplaced.Wait();
OnZeroDestory();
SystemManager.Instance.Destroy();
LogRecorder.Shutdown();
SystemMonitor.WaitMe();
GC.Collect();
ZContext.Destroy();
ZeroTrace.SystemLog("Application shutdown ,see you late.");
ApplicationState = StationState.Disposed;
WaitToken.Release();
}
19
Source : BatchPublisher.cs
with Mozilla Public License 2.0
from agebullhu
with Mozilla Public License 2.0
from agebullhu
protected sealed override bool RunInner(CancellationToken token)
{
_socket = ZSocket.CreateRequestSocket(Config.RequestAddress, Idenreplacedy);
SystemManager.Instance.HeartReady(StationName, RealName);
State = StationState.Run;
int cnt = 0;
while (CanLoop)
{
Thread.Sleep(10);
if (token.IsCancellationRequested)
break;
if (++cnt == 36)
{
GC.Collect();
cnt = 0;
}
var array = Items.Switch();
if (array == null)
{
Thread.Sleep(10);
continue;
}
if (TsonOperator == null)
{
do
{
var datas = array.Count > 300 ? array.Take(255).ToArray() : array.ToArray();
while (!_socket.Publish(Name, datas) && CanLoop)
Thread.Sleep(10);
if (array.Count > 300)
array.RemoveRange(0, 255);
} while (array.Count > 300);
continue;
}
int idx = 0;
while (idx < array.Count)
{
byte[] buf;
using (TsonSerializer serializer = new TsonSerializer(TsonDataType.Array))
{
serializer.WriteType(TsonDataType.Object);
int size = array.Count - idx;
if (size > 255)
size = 255;
serializer.WriteLen(size);
for (; size > 0 && idx < array.Count; idx++, --size)
{
if (array[idx] == null)
{
serializer.WriteType(TsonDataType.Empty);
continue;
}
using (TsonObjectSerializeScope.CreateScope(serializer))
{
if (array[idx] != null)
TsonOperator.ToTson(serializer, array[idx]);
}
}
buf = serializer.Close();
}
while (!_socket.Publish(ZeroPublishExtend.PubDescriptionTson2, Name, array.Count.ToString(), buf) && CanLoop)
Thread.Sleep(10);
}
}
SystemManager.Instance.HeartLeft(StationName, RealName);
_socket.TryClose();
return true;
}
19
Source : Utils.cs
with Apache License 2.0
from Aggrathon
with Apache License 2.0
from Aggrathon
public static void ClearMemory()
{
System.GC.Collect();
Resources.UnloadUnusedreplacedets();
}
19
Source : Map.cs
with GNU General Public License v3.0
from AHeroicLlama
with GNU General Public License v3.0
from AHeroicLlama
static int DrawLegend(Font font, Graphics imageGraphic)
{
if (FormMaster.legendItems.Count == 0)
{
return 0;
}
Dictionary<int, string> overridingLegendText = FormMaster.GatherOverriddenLegendTexts();
List<int> drawnGroups = new List<int>();
// Calculate the total height of all legend strings with their plot icons beside, combined
int legendTotalHeight = 0;
foreach (MapItem mapItem in FormMaster.legendItems)
{
// Skip legend groups that are merged/overridden and have already been accounted for
if (drawnGroups.Contains(mapItem.legendGroup) && overridingLegendText.ContainsKey(mapItem.legendGroup))
{
continue;
}
legendTotalHeight += Math.Max(
(int)Math.Ceiling(imageGraphic.MeasureString(mapItem.GetLegendText(false), font, legendBounds).Height),
SettingsPlot.IsIconOrTopographic() ? SettingsPlotIcon.iconSize : 0);
drawnGroups.Add(mapItem.legendGroup);
}
int skippedLegends = 0; // How many legend items did not fit onto the map
// The initial Y coord where first legend item should be written, in order to Y-center the entire legend
int legendCaretHeight = (mapDimension / 2) - (legendTotalHeight / 2);
// Reset the drawn groups list, as we need to iterate over the items again
drawnGroups = new List<int>();
// Loop over every MapItem and draw the legend
foreach (MapItem mapItem in FormMaster.legendItems)
{
// Skip legend groups that are merged/overridden and have already been drawn
if (drawnGroups.Contains(mapItem.legendGroup) && overridingLegendText.ContainsKey(mapItem.legendGroup))
{
continue;
}
// Calculate positions and color for legend text (plus icon)
int fontHeight = (int)Math.Ceiling(imageGraphic.MeasureString(mapItem.GetLegendText(false), font, legendBounds).Height);
PlotIcon icon = mapItem.GetIcon();
Image plotIconImg = SettingsPlot.IsIconOrTopographic() ? icon.GetIconImage() : null;
Color legendColor = SettingsPlot.IsTopographic() ? SettingsPlotTopograph.legendColor : mapItem.GetLegendColor();
Brush textBrush = new SolidBrush(legendColor);
int iconHeight = SettingsPlot.IsIconOrTopographic() ?
plotIconImg.Height :
0;
int legendHeight = Math.Max(fontHeight, iconHeight);
// If the icon is taller than the text, offset the text it so it sits Y-centrally against the icon
int textOffset = 0;
if (iconHeight > fontHeight)
{
textOffset = (iconHeight - fontHeight) / 2;
}
// If the legend text/item fits on the map vertically
if (legendCaretHeight > 0 && legendCaretHeight + legendHeight < mapDimension)
{
if (SettingsPlot.IsIconOrTopographic())
{
imageGraphic.DrawImage(plotIconImg, (float)(legendIconX - (plotIconImg.Width / 2d)), (float)(legendCaretHeight - (plotIconImg.Height / 2d) + (legendHeight / 2d)));
}
imageGraphic.DrawString(mapItem.GetLegendText(false), font, textBrush, new RectangleF(legendXMin, legendCaretHeight + textOffset, legendWidth, legendHeight));
}
else
{
skippedLegends++;
}
drawnGroups.Add(mapItem.legendGroup);
legendCaretHeight += legendHeight; // Move the 'caret' down for the next item, enough to fit the icon and the text
}
GC.Collect();
return skippedLegends;
}
19
Source : Map.cs
with GNU General Public License v3.0
from AHeroicLlama
with GNU General Public License v3.0
from AHeroicLlama
static void DrawCellBackground(Graphics backgroundLayer)
{
if (!SettingsMap.IsCellModeActive())
{
return;
}
CellScaling cellScaling = SettingsCell.GetCell().GetScaling();
int outlineWidth = SettingsCell.outlineWidth;
int outlineSize = SettingsCell.outlineSize;
Image plotIconImg = new Bitmap(outlineSize, outlineSize);
Graphics plotIconGraphic = Graphics.FromImage(plotIconImg);
plotIconGraphic.SmoothingMode = SmoothingMode.AntiAlias;
Color outlineColor = Color.FromArgb(SettingsCell.outlineAlpha, SettingsCell.outlineColor);
Pen outlinePen = new Pen(outlineColor, outlineWidth);
plotIconGraphic.DrawEllipse(
outlinePen,
new RectangleF(outlineWidth, outlineWidth, outlineSize - (outlineWidth * 2), outlineSize - (outlineWidth * 2)));
// Iterate over every data point and draw it
foreach (MapDataPoint point in DataHelper.GetAllCellCoords(SettingsCell.GetCell().formID))
{
// If this coordinate exceeds the user-selected cell mapping height bounds, skip it
// (Also accounts for the z-height of volumes)
if (point.z < SettingsCell.GetMinHeightCoordBound() || point.z > SettingsCell.GetMaxHeightCoordBound())
{
continue;
}
point.x += cellScaling.xOffset;
point.y += cellScaling.yOffset;
// Multiply the coordinates by the scaling, but multiply around 0,0
point.x = ((point.x - (mapDimension / 2)) * cellScaling.scale) + (mapDimension / 2);
point.y = ((point.y - (mapDimension / 2)) * cellScaling.scale) + (mapDimension / 2);
point.boundX *= cellScaling.scale;
point.boundY *= cellScaling.scale;
backgroundLayer.DrawImage(plotIconImg, (float)(point.x - (plotIconImg.Width / 2d)), (float)(point.y - (plotIconImg.Height / 2d)));
}
GC.Collect();
}
19
Source : Map.cs
with GNU General Public License v3.0
from AHeroicLlama
with GNU General Public License v3.0
from AHeroicLlama
public static void Reset()
{
SettingsMap.brightness = SettingsMap.brightnessDefault;
SettingsMap.layerMilitary = false;
SettingsMap.grayScale = false;
DrawBaseLayer();
GC.Collect();
GC.WaitForPendingFinalizers();
}
19
Source : Preprocessor.cs
with GNU General Public License v3.0
from AHeroicLlama
with GNU General Public License v3.0
from AHeroicLlama
static void GenericClose(CSVFile file)
{
file.Validate();
Directory.CreateDirectory(outputPathx64);
file.WriteToFile(outputPathx64 + "//");
file.rows = null;
GC.Collect();
Console.WriteLine(file.fileName + " done.");
}
19
Source : Dashboard.cs
with GNU General Public License v3.0
from AHosseinRnj
with GNU General Public License v3.0
from AHosseinRnj
private void ConnectBtn_Click(object sender, EventArgs e)
{
if (CountriesCmBox.SelectedIndex == 0)
{
MessageBox.Show("Please Select a Location", "Error at 0x53", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (!PPTP_rBtn.Checked && !L2TP_rBtn.Checked)
{
MessageBox.Show("Please Select a Protocol", "Error at 0x59", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
VPN.setParameters(serverIP, adapterName, userName, preplacedWord, selectedProtocol, preSharedKey);
try
{
VPN.Connect();
}
finally
{
ConnectBtn_Enabled_False();
DisconnectBtn_Enabled_True();
CountriesCmBox_Enabled_False();
statusPicbox.Image = Properties.Resources.Connectpic;
GC.Collect();
}
}
}
}
19
Source : Dashboard.cs
with GNU General Public License v3.0
from AHosseinRnj
with GNU General Public License v3.0
from AHosseinRnj
private void DisconnectBtn_Click(object sender, EventArgs e)
{
try
{
VPN.Disconnect();
}
finally
{
ConnectBtn_Enabled_True();
DisconnectBtn_Enabled_False();
CountriesCmBox_Enabled_True();
statusPicbox.Image = Properties.Resources.Disconnectpic;
GC.Collect();
}
}
19
Source : Dashboard.cs
with GNU General Public License v3.0
from AHosseinRnj
with GNU General Public License v3.0
from AHosseinRnj
public void ExitMethod()
{
if (!ConnectBtn.Enabled)
{
MessageBox.Show("Please Disconnect First", "Error at 0x150", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
VPN.Dispose();
VPN = null;
GC.Collect();
Application.Exit();
}
}
19
Source : GarbageCollectionSample.cs
with The Unlicense
from ahotko
with The Unlicense
from ahotko
private void ForceGarbageCollection()
{
var gc = new GarbageCollection();
var gcBefore = new GarbageCollectionInfo();
Console.WriteLine($"Before Garbage Collection: {gcBefore}");
gc.MakeSomeGarbage();
var gcAfterGeneratingGarbage = new GarbageCollectionInfo();
Console.WriteLine($"After Generating Garbage: {gcAfterGeneratingGarbage}");
GC.Collect(0);
var gcAfterCleanupGen0 = new GarbageCollectionInfo();
Console.WriteLine($"After Garbage Collection of Gen0: {gcAfterCleanupGen0}");
GC.Collect(1);
var gcAfterCleanupGen1 = new GarbageCollectionInfo();
Console.WriteLine($"After Garbage Collection of Gen1: {gcAfterCleanupGen1}");
GC.WaitForPendingFinalizers();
GC.Collect(2);
var gcAfterCleanupGen2 = new GarbageCollectionInfo();
Console.WriteLine($"After Garbage Collection of Gen2: {gcAfterCleanupGen2}");
GC.WaitForPendingFinalizers();
GC.Collect();
var gcAfterCleanup = new GarbageCollectionInfo();
Console.WriteLine($"After Garbage Collection: {gcAfterCleanup}");
}
19
Source : MainWindow.xaml.cs
with MIT License
from ahuchjm
with MIT License
from ahuchjm
List<System.Drawing.Point> FindPicture(string subPic, string parPic, System.Drawing.Rectangle searchRect, byte errorRange, double matchRate = 0.9, bool isFindAll = false)
{
List<System.Drawing.Point> ListPoint = new List<System.Drawing.Point>();
var subBitmap = new Bitmap(subPic);
var parBitmap = new Bitmap(parPic);
int subWidth = subBitmap.Width;
int subHeight = subBitmap.Height;
int parWidth = parBitmap.Width;
int parHeight = parBitmap.Height;
if (searchRect.IsEmpty)
{
searchRect = new System.Drawing.Rectangle(0, 0, parBitmap.Width, parBitmap.Height);
}
var searchLeftTop = searchRect.Location;
var searchSize = searchRect.Size;
System.Drawing.Color startPixelColor = subBitmap.GetPixel(0, 0);
var subData = subBitmap.LockBits(new System.Drawing.Rectangle(0, 0, subBitmap.Width, subBitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var parData = parBitmap.LockBits(new System.Drawing.Rectangle(0, 0, parBitmap.Width, parBitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var byteArrarySub = new byte[subData.Stride * subData.Height];
var byteArraryPar = new byte[parData.Stride * parData.Height];
Marshal.Copy(subData.Scan0, byteArrarySub, 0, subData.Stride * subData.Height);
Marshal.Copy(parData.Scan0, byteArraryPar, 0, parData.Stride * parData.Height);
var iMax = searchLeftTop.Y + searchSize.Height - subData.Height;//行
var jMax = searchLeftTop.X + searchSize.Width - subData.Width;//列
int smallOffsetX = 0, smallOffsetY = 0;
int smallStartX = 0, smallStartY = 0;
int pointX = -1; int pointY = -1;
for (int i = searchLeftTop.Y; i < iMax; i++)
{
for (int j = searchLeftTop.X; j < jMax; j++)
{
//大图x,y坐标处的颜色值
int x = j, y = i;
int parIndex = i * parWidth * 4 + j * 4;
var colorBig = System.Drawing.Color.FromArgb(byteArraryPar[parIndex + 3], byteArraryPar[parIndex + 2], byteArraryPar[parIndex + 1], byteArraryPar[parIndex]);
;
if (ColorAEqualColorB(colorBig, startPixelColor, errorRange))
{
smallStartX = x - smallOffsetX;//待找的图X坐标
smallStartY = y - smallOffsetY;//待找的图Y坐标
int sum = 0;//所有需要比对的有效点
int matchNum = 0;//成功匹配的点
for (int m = 0; m < subHeight; m++)
{
for (int n = 0; n < subWidth; n++)
{
int x1 = n, y1 = m;
int subIndex = m * subWidth * 4 + n * 4;
var color = System.Drawing.Color.FromArgb(byteArrarySub[subIndex + 3], byteArrarySub[subIndex + 2], byteArrarySub[subIndex + 1], byteArrarySub[subIndex]);
sum++;
int x2 = smallStartX + x1, y2 = smallStartY + y1;
int parReleativeIndex = y2 * parWidth * 4 + x2 * 4;//比对大图对应的像素点的颜色
var colorPixel = System.Drawing.Color.FromArgb(byteArraryPar[parReleativeIndex + 3], byteArraryPar[parReleativeIndex + 2], byteArraryPar[parReleativeIndex + 1], byteArraryPar[parReleativeIndex]);
if (ColorAEqualColorB(colorPixel, color, errorRange))
{
matchNum++;
}
}
}
if ((double)matchNum / sum >= matchRate)
{
Console.WriteLine((double)matchNum / sum);
pointX = smallStartX + (int)(subWidth / 2.0);
pointY = smallStartY + (int)(subHeight / 2.0);
var point = new System.Drawing.Point(pointX, pointY);
if (!ListContainsPoint(ListPoint, point, 10))
{
ListPoint.Add(point);
}
if (!isFindAll)
{
goto FIND_END;
}
}
}
//小图x1,y1坐标处的颜色值
}
}
FIND_END:
subBitmap.UnlockBits(subData);
parBitmap.UnlockBits(parData);
subBitmap.Dispose();
parBitmap.Dispose();
GC.Collect();
return ListPoint;
}
19
Source : MainWindow.xaml.cs
with MIT License
from ahuchjm
with MIT License
from ahuchjm
List<NumBody> FindText(string subPic, string parPic, System.Drawing.Rectangle searchRect, byte errorRange, double matchRate = 0.9, bool isFindAll = false)
{
List<NumBody> ListPoint = new List<NumBody>();
var subBitmap = new Bitmap(subPic);
var parBitmap = new Bitmap(parPic);
int subWidth = subBitmap.Width;
int subHeight = subBitmap.Height;
int parWidth = parBitmap.Width;
int parHeight = parBitmap.Height;
var bgColor = subBitmap.GetPixel(0, 0);//背景红色
if (searchRect.IsEmpty)
{
searchRect = new System.Drawing.Rectangle(0, 0, parBitmap.Width, parBitmap.Height);
}
var searchLeftTop = searchRect.Location;
var searchSize = searchRect.Size;
var subData = subBitmap.LockBits(new System.Drawing.Rectangle(0, 0, subBitmap.Width, subBitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var parData = parBitmap.LockBits(new System.Drawing.Rectangle(0, 0, parBitmap.Width, parBitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var byteArrarySub = new byte[subData.Stride * subData.Height];
var byteArraryPar = new byte[parData.Stride * parData.Height];
Marshal.Copy(subData.Scan0, byteArrarySub, 0, subData.Stride * subData.Height);
Marshal.Copy(parData.Scan0, byteArraryPar, 0, parData.Stride * parData.Height);
var iMax = searchLeftTop.Y + searchSize.Height - subData.Height;//行
var jMax = searchLeftTop.X + searchSize.Width - subData.Width;//列
System.Drawing.Color startPixelColor = System.Drawing.Color.FromArgb(0, 0, 0);
int smallOffsetX = 0, smallOffsetY = 0;
int smallStartX = 0, smallStartY = 0;
int pointX = -1; int pointY = -1;
for (int m = 0; m < subHeight; m++)
{
for (int n = 0; n < subWidth; n++)
{
smallOffsetX = n;
smallOffsetY = m;
int subIndex = m * subWidth * 4 + n * 4;
var color = System.Drawing.Color.FromArgb(byteArrarySub[subIndex + 3], byteArrarySub[subIndex + 2], byteArrarySub[subIndex + 1], byteArrarySub[subIndex]);
if (!ColorAEqualColorB(color, bgColor, errorRange))
{
startPixelColor = color;
goto END;
}
}
}
END:
for (int i = searchLeftTop.Y; i < iMax; i++)
{
for (int j = searchLeftTop.X; j < jMax; j++)
{
//大图x,y坐标处的颜色值
int x = j, y = i;
int parIndex = i * parWidth * 4 + j * 4;
var colorBig = System.Drawing.Color.FromArgb(byteArraryPar[parIndex + 3], byteArraryPar[parIndex + 2], byteArraryPar[parIndex + 1], byteArraryPar[parIndex]);
;
List<System.Drawing.Point> myListPoint = new List<System.Drawing.Point>();
if (ColorAEqualColorB(colorBig, startPixelColor, errorRange))
{
smallStartX = x - smallOffsetX;//待找的图X坐标
smallStartY = y - smallOffsetY;//待找的图Y坐标
int sum = 0;//所有需要比对的有效点
int matchNum = 0;//成功匹配的点
for (int m = 0; m < subHeight; m++)
{
for (int n = 0; n < subWidth; n++)
{
int x1 = n, y1 = m;
int subIndex = m * subWidth * 4 + n * 4;
var color = System.Drawing.Color.FromArgb(byteArrarySub[subIndex + 3], byteArrarySub[subIndex + 2], byteArrarySub[subIndex + 1], byteArrarySub[subIndex]);
if (color != bgColor)
{
sum++;
int x2 = smallStartX + x1, y2 = smallStartY + y1;
int parReleativeIndex = y2 * parWidth * 4 + x2 * 4;//比对大图对应的像素点的颜色
var colorPixel = System.Drawing.Color.FromArgb(byteArraryPar[parReleativeIndex + 3], byteArraryPar[parReleativeIndex + 2], byteArraryPar[parReleativeIndex + 1], byteArraryPar[parReleativeIndex]);
if (ColorAEqualColorB(colorPixel, color, errorRange))
{
matchNum++;
}
myListPoint.Add(new System.Drawing.Point(x2, y2));
}
}
}
double rate = (double)matchNum / sum;
if (rate>= matchRate)
{
Console.WriteLine((double)matchNum / sum);
pointX = smallStartX + (int)(subWidth / 2.0);
pointY = smallStartY + (int)(subHeight / 2.0);
var point = new System.Drawing.Point(pointX, pointY);
if (!ListTextBodyContainsPoint(ListPoint, point, 1))
{
ListPoint.Add(new NumBody() { point = point, matchNum = matchNum,matchSum=sum, matchRate = rate, bodyCollectionPoint = myListPoint });
}
SearchNumbersByMatchNum(ref ListPoint);
if (!isFindAll)
{
goto FIND_END;
}
}
}
//小图x1,y1坐标处的颜色值
}
}
FIND_END:
subBitmap.UnlockBits(subData);
parBitmap.UnlockBits(parData);
subBitmap.Dispose();
parBitmap.Dispose();
GC.Collect();
return ListPoint;
}
19
Source : Information.cs
with GNU General Public License v3.0
from AHosseinRnj
with GNU General Public License v3.0
from AHosseinRnj
private void ExitBtn_Click(object sender, EventArgs e)
{
GC.Collect();
this.Close();
}
19
Source : ShadowMapCacheSystem.cs
with Apache License 2.0
from aivclab
with Apache License 2.0
from aivclab
public static void Dispose() {
if (_instance == null) {
//CustomDebug.Log("ShadowMapCacheSystem instance is null", DebugType.SettingMenus);
return;
}
//CustomDebug.Log("Disposing ShadowMapCacheSystem", DebugType.SettingMenus);
_disposed = true;
SceneManager.sceneLoaded -= _instance.NewSceneLoaded;
GC.Collect();
}
19
Source : SteamVR_LoadLevel.cs
with MIT License
from ajayyy
with MIT License
from ajayyy
IEnumerator LoadLevel()
{
// Optionally rotate loading screen transform around the camera into view.
// We replacedume here that the loading screen is already facing toward the origin,
// and that the progress bar transform (if any) is a child and will follow along.
if (loadingScreen != null && loadingScreenDistance > 0.0f)
{
// Wait until we have tracking.
var hmd = SteamVR_Controller.Input((int)OpenVR.k_unTrackedDeviceIndex_Hmd);
while (!hmd.hasTracking)
yield return null;
var tloading = hmd.transform;
tloading.rot = Quaternion.Euler(0.0f, tloading.rot.eulerAngles.y, 0.0f);
tloading.pos += tloading.rot * new Vector3(0.0f, 0.0f, loadingScreenDistance);
var t = loadingScreenTransform != null ? loadingScreenTransform : transform;
t.position = tloading.pos;
t.rotation = tloading.rot;
}
_active = this;
SteamVR_Events.Loading.Send(true);
// Calculate rate for fading in loading screen and progress bar.
if (loadingScreenFadeInTime > 0.0f)
{
fadeRate = 1.0f / loadingScreenFadeInTime;
}
else
{
alpha = 1.0f;
}
var overlay = OpenVR.Overlay;
// Optionally create our loading screen overlay.
if (loadingScreen != null && overlay != null)
{
loadingScreenOverlayHandle = GetOverlayHandle("loadingScreen", loadingScreenTransform != null ? loadingScreenTransform : transform, loadingScreenWidthInMeters);
if (loadingScreenOverlayHandle != OpenVR.k_ulOverlayHandleInvalid)
{
var texture = new Texture_t();
texture.handle = loadingScreen.GetNativeTexturePtr();
texture.eType = SteamVR.instance.textureType;
texture.eColorSpace = EColorSpace.Auto;
overlay.SetOverlayTexture(loadingScreenOverlayHandle, ref texture);
}
}
bool fadedForeground = false;
// Fade out to compositor
SteamVR_Events.LoadingFadeOut.Send(fadeOutTime);
// Optionally set a skybox to use as a backdrop in the compositor.
var compositor = OpenVR.Compositor;
if (compositor != null)
{
if (front != null)
{
SteamVR_Skybox.SetOverride(front, back, left, right, top, bottom);
// Explicitly fade to the compositor since loading will cause us to stop rendering.
compositor.FadeGrid(fadeOutTime, true);
yield return new WaitForSeconds(fadeOutTime);
}
else if (backgroundColor != Color.clear)
{
// Otherwise, use the specified background color.
if (showGrid)
{
// Set compositor background color immediately, and start fading to it.
compositor.FadeToColor(0.0f, backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a, true);
compositor.FadeGrid(fadeOutTime, true);
yield return new WaitForSeconds(fadeOutTime);
}
else
{
// Fade the foreground color in (which will blend on top of the scene), and then cut to the compositor.
compositor.FadeToColor(fadeOutTime, backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a, false);
yield return new WaitForSeconds(fadeOutTime + 0.1f);
compositor.FadeGrid(0.0f, true);
fadedForeground = true;
}
}
}
// Now that we're fully faded out, we can stop submitting frames to the compositor.
SteamVR_Render.pauseRendering = true;
// Continue waiting for the overlays to fully fade in before continuing.
while (alpha < 1.0f)
yield return null;
// Keep us from getting destroyed when loading the new level, otherwise this coroutine will get stopped prematurely.
transform.parent = null;
DontDestroyOnLoad(gameObject);
if (!string.IsNullOrEmpty(internalProcessPath))
{
Debug.Log("Launching external application...");
var applications = OpenVR.Applications;
if (applications == null)
{
Debug.Log("Failed to get OpenVR.Applications interface!");
}
else
{
var workingDirectory = Directory.GetCurrentDirectory();
var fullPath = Path.Combine(workingDirectory, internalProcessPath);
Debug.Log("LaunchingInternalProcess");
Debug.Log("ExternalAppPath = " + internalProcessPath);
Debug.Log("FullPath = " + fullPath);
Debug.Log("ExternalAppArgs = " + internalProcessArgs);
Debug.Log("WorkingDirectory = " + workingDirectory);
var error = applications.LaunchInternalProcess(fullPath, internalProcessArgs, workingDirectory);
Debug.Log("LaunchInternalProcessError: " + error);
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#elif !UNITY_METRO
System.Diagnostics.Process.GetCurrentProcess().Kill();
#endif
}
}
else
{
var mode = loadAdditive ? UnityEngine.SceneManagement.LoadSceneMode.Additive : UnityEngine.SceneManagement.LoadSceneMode.Single;
if (loadAsync)
{
Application.backgroundLoadingPriority = ThreadPriority.Low;
async = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(levelName, mode);
// Performing this in a while loop instead seems to help smooth things out.
//yield return async;
while (!async.isDone)
{
yield return null;
}
}
else
{
UnityEngine.SceneManagement.SceneManager.LoadScene(levelName, mode);
}
}
yield return null;
System.GC.Collect();
yield return null;
Shader.WarmupAllShaders();
// Optionally wait a short period of time after loading everything back in, but before we start rendering again
// in order to give everything a change to settle down to avoid any hitching at the start of the new level.
yield return new WaitForSeconds(postLoadSettleTime);
SteamVR_Render.pauseRendering = false;
// Fade out loading screen.
if (loadingScreenFadeOutTime > 0.0f)
{
fadeRate = -1.0f / loadingScreenFadeOutTime;
}
else
{
alpha = 0.0f;
}
// Fade out to compositor
SteamVR_Events.LoadingFadeIn.Send(fadeInTime);
// Refresh compositor reference since loading scenes might have invalidated it.
compositor = OpenVR.Compositor;
if (compositor != null)
{
// Fade out foreground color if necessary.
if (fadedForeground)
{
compositor.FadeGrid(0.0f, false);
compositor.FadeToColor(fadeInTime, 0.0f, 0.0f, 0.0f, 0.0f, false);
yield return new WaitForSeconds(fadeInTime);
}
else
{
// Fade scene back in, and reset skybox once no longer visible.
compositor.FadeGrid(fadeInTime, false);
yield return new WaitForSeconds(fadeInTime);
if (front != null)
{
SteamVR_Skybox.ClearOverride();
}
}
}
// Finally, stick around long enough for our overlays to fully fade out.
while (alpha > 0.0f)
yield return null;
if (overlay != null)
{
if (progressBarOverlayHandle != OpenVR.k_ulOverlayHandleInvalid)
overlay.HideOverlay(progressBarOverlayHandle);
if (loadingScreenOverlayHandle != OpenVR.k_ulOverlayHandleInvalid)
overlay.HideOverlay(loadingScreenOverlayHandle);
}
Destroy(gameObject);
_active = null;
SteamVR_Events.Loading.Send(false);
}
19
Source : FlowableDelayTest.cs
with Apache License 2.0
from akarnokd
with Apache License 2.0
from akarnokd
[Test]
public void RefLeak()
{
var wr = RunLeak();
for (int i = 0; i < 5; i++)
{
GC.Collect();
Thread.Sleep(100);
}
var c = Executors.Computation;
replacedert.IsFalse(wr.TryGetTarget(out TestSubscriber<int> o));
Console.WriteLine(c);
}
19
Source : FileCollector.cs
with MIT License
from AkiniKites
with MIT License
from AkiniKites
private List<T> LoadInternal()
{
if (_useCache && _cache.TryLoadCache(out var cached))
{
if (cached.Any())
return cached;
}
else
{
cached = new List<T>();
}
var files = Prefetch.Load().Files.Keys;
var bag = new ConcurrentBag<T>();
var parallels = IoC.CmdOptions.SingleThread ? 1 : Environment.ProcessorCount;
var tasks = new ParallelTasks<string>(
parallels, file =>
{
if (_fileNameValidator(file) && !_ignored.Any(x => x.IsMatch(file)))
{
foreach (var item in _itemGetter(file))
bag.Add(item);
}
});
tasks.Start();
tasks.AddItems(files);
tasks.WaitForComplete();
GC.Collect();
var itemList = bag.ToList();
if (_consolidator != null)
itemList = _consolidator(itemList).ToList();
if (_useCache)
{
cached.AddRange(itemList);
_cache.Save(cached);
}
return itemList;
}
19
Source : AssetBundleFilesAnalyze.cs
with MIT License
from akof1314
with MIT License
from akof1314
public static void Clear()
{
if (sreplacedetBundleFileInfos != null)
{
sreplacedetBundleFileInfos.Clear();
sreplacedetBundleFileInfos = null;
}
if (sreplacedetFileInfos != null)
{
sreplacedetFileInfos.Clear();
sreplacedetFileInfos = null;
}
sreplacedyzeScene = null;
#if UNITY_5 || UNITY_5_3_OR_NEWER
EditorUtility.UnloadUnusedreplacedetsImmediate();
#endif
System.GC.Collect();
}
19
Source : DelegateReferenceTests.cs
with Apache License 2.0
from AKruimink
with Apache License 2.0
from AKruimink
[Fact]
public async Task Construct_KeepReferenceAliveTrue_ShouldPreventGarbageCollection()
{
// Prepare
Action referenceAction = () => { };
var delegateReference = new DelegateReference(referenceAction, true);
// Act
referenceAction = null!;
await Task.Delay(100);
GC.Collect();
// replacedert
replacedert.NotNull(delegateReference.Delegate);
}
19
Source : DelegateReferenceTests.cs
with Apache License 2.0
from AKruimink
with Apache License 2.0
from AKruimink
[Fact]
public async Task Construct_KeepReferenceAliveFalse_ShouldGetGarbageCollected()
{
// Prepare
Action referenceAction = () => { };
var delegateReference = new DelegateReference(referenceAction, false);
// Act
referenceAction = null!;
await Task.Delay(100);
GC.Collect();
// replacedert
replacedert.NotNull(delegateReference.Delegate);
}
19
Source : DelegateReferenceTests.cs
with Apache License 2.0
from AKruimink
with Apache License 2.0
from AKruimink
[Fact]
public async Task GetDelegate_DelegateNotAlive_ShouldReturnNull()
{
// Prepare
var clreplacedFixture = new ClreplacedFixture();
var delegateReference = new DelegateReference((Action)clreplacedFixture.EmptyMethod, false);
// Act
clreplacedFixture = null!;
await Task.Delay(100);
GC.Collect();
// replacedert
replacedert.Null(delegateReference.Delegate);
}
19
Source : DelegateReferenceTests.cs
with Apache License 2.0
from AKruimink
with Apache License 2.0
from AKruimink
[Fact]
public async Task DelegateEquals_EqualNullDelegateReferenceNotAlive_ShouldReturnTrue()
{
// Prepare
var clreplacedFixture = new ClreplacedFixture();
var weakReference = new WeakReference((Action)clreplacedFixture.EmptyMethod);
var delegateReference = new DelegateReference((Action)clreplacedFixture.EmptyMethod, false);
// Act
clreplacedFixture = null!;
await Task.Delay(100);
GC.Collect();
// replacedert
replacedert.False(weakReference.IsAlive);
replacedert.True(delegateReference.DelegateEquals(null!));
}
19
Source : Program.cs
with MIT License
from Alan-FGR
with MIT License
from Alan-FGR
static void Tests2()
{
foreach (var warmup in new[] { true, false })
for (int li = 0; li < 140; li++)
{
GC.Collect();
GC.WaitForPendingFinalizers();
var uts = new UntypedBase[16];
for (int i = 0; i < 16; i++)
{
if(i % 2 == 0)
uts[i] = new Typed1();
else
uts[i] = new Typed2();
}
var its = new ISum[16];
for (int i = 0; i < 16; i++)
{
if (i % 2 == 0)
its[i] = new Typed1();
else
its[i] = new Typed2();
}
var dts = new NoVirt[16];
for (int i = 0; i < 16; i++)
{
if (i % 2 == 0)
dts[i] = new NoVirt();
else
dts[i] = new NoVirt();
}
Measure($"Interface", warmup, () =>
{
int check = 0;
for (int i = 0; i < 1 << 20; i++)
check += its[i % 16].Sum();
return check;
});
Measure($"Cast", warmup, () =>
{
int check = 0;
for (int i = 0; i < 1 << 20; i++)
check += uts[i % 16].CastSum();
return check;
});
Measure($"Uncast", warmup, () =>
{
int check = 0;
for (int i = 0; i < 1 << 20; i++)
check += uts[i % 16].Sum();
return check;
});
Measure($"Decast", warmup, () =>
{
int check = 0;
for (int i = 0; i < 1 << 20; i++)
check += uts[i % 16].Sum();
return check;
});
Measure($"Devirt", warmup, () =>
{
int check = 0;
for (int i = 0; i < 1 << 20; i++)
check += dts[i % 16].Sum();
return check;
});
}
foreach (var result in results_)
{
Console.WriteLine(
$"Benchmarked avg of {result.Value.Count} samples totalling {result.Value.Average():F3} µs to {result.Key}");
}
}
19
Source : Program.cs
with MIT License
from Alan-FGR
with MIT License
from Alan-FGR
private static void Tests1()
{
int keysCount = 1 << 15;
int maxValue = 1 << 16;
uint umaxValue = 1 << 16;
int[] keys = new int[keysCount];
uint[] ukeys = new uint[keysCount];
var r = new Random(42);
for (int i = 0; i < keysCount; i++)
{
keys[i] = r.Next(maxValue);
ukeys[i] = (uint) keys[i];
}
foreach (var warmup in new[] {true, false})
for (int li = 0; li < 40; li++)
{
GC.Collect();
GC.WaitForPendingFinalizers();
var dict = new Dictionary<int, int>();
Measure($"Add to Dictionary", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
dict[keys[i]] = maxValue - keys[i];
return 0;
});
Measure($"Sum in Dictionary", warmup, () =>
{
int checksum = 0;
for (int i = 0; i < keysCount; i++)
checksum += dict[keys[i]];
return checksum;
});
Measure($"Rem from Dictionary", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
dict.Remove(keys[i]);
return 0;
});
var sa = new SparseArray(16, 10);
Measure($"Add to SparseArray", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
sa.Add(keys[i], maxValue - keys[i]);
return 0;
});
Measure($"Sum in SparseArray", warmup, () =>
{
int checksum = 0;
for (int i = 0; i < keysCount; i++)
checksum += sa.Get(keys[i]);
return checksum;
});
//Measure($"Rem from SparseArray", warmup, () =>
//{
// for (int i = 0; i < keysCount; i++)
// dict.Remove(keys[i]);
// return 0;
//});
var um = new UInt32UInt32Map();
Measure($"Add to UInt32UInt32Map", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
um.GetRef(ukeys[i]) = (umaxValue - ukeys[i]);
return 0;
});
Measure($"Sum in UInt32UInt32Map", warmup, () =>
{
uint checksum = 0;
for (int i = 0; i < keysCount; i++)
checksum += um.GetRef(ukeys[i]);
return checksum;
});
var im = new Int32Int32Map();
Measure($"Add to Int32Int32Map", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
im.GetRef(keys[i]) = (maxValue - keys[i]);
return 0;
});
Measure($"Sum in Int32Int32Map", warmup, () =>
{
int checksum = 0;
for (int i = 0; i < keysCount; i++)
checksum += im.GetRef(keys[i]);
return checksum;
});
/*
var pool = new BufferPool(256).SpecializeFor<int>();
QuickDictionary<int, int, Buffer<int>, Buffer<int>, Buffer<int>, PrimitiveComparer<int>>
.Create(pool, pool, pool, 2, 3, out var bdict);
Measure($"Add to BepuDictionary", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
bdict.Add(keys[i], maxValue - keys[i], pool, pool, pool);
return 0;
});
Measure($"Sum in BepuDictionary", warmup, () =>
{
int checksum = 0;
for (int i = 0; i < keysCount; i++)
{
bdict.TryGetValue(keys[i], out int value);
checksum += value;
}
return checksum;
});
Measure($"Rem from BepuDictionary", warmup, () =>
{
for (int i = 0; i < keysCount; i++)
bdict.FastRemove(keys[i]);
return 0;
});
//dictionary.EnsureCapacity(dictionary.Count * 3, pool, pool, pool);
//dictionary.Compact(pool, pool, pool);
bdict.Dispose(pool, pool, pool);
pool.Raw.Clear();
*/
}
foreach (var result in results_)
{
Console.WriteLine(
$"Benchmarked avg of {result.Value.Count} samples totalling {result.Value.Average():F3} µs to {result.Key}");
}
//TestSetResizing<Buffer<int>, BufferPool<int>>(bufferPool);
//var arrayPool = new ArrayPool<int>();
//TestSetResizing<Array<int>, ArrayPool<int>>(arrayPool);
//arrayPool.Clear();
}
19
Source : Program.cs
with MIT License
from alexshtf
with MIT License
from alexshtf
static void Main(string[] args)
{
Console.SetWindowSize(120, 30);
int[] sizes = { 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000 };
for (int i = 0; i < sizes.Length; ++i)
{
var termsCount = sizes[i];
var varsCount = sizes[i];
Console.WriteLine("Benchmark for {0} terms and {1} variables", termsCount, varsCount);
Console.Write("\tConstructing coefficients ...");
var coefficients = GenerateCoefficients(termsCount, varsCount);
Console.WriteLine(" done");
// generate variables
var vars = new Variable[varsCount];
for(int j = 0; j < sizes[i]; ++j)
vars[j] = new Variable();
Console.Write("\tGenerating input data ...");
double[][] inputData = new double[1000][];
for (int j = 0; j < inputData.Length; ++j)
inputData[j] = RandomDoubles(varsCount);
Console.WriteLine(" done");
GC.Collect();
Thread.Sleep(4000);
Console.Write("\tConstructing compiled term ...");
var stopWatch = Stopwatch.StartNew();
var compiledTerm = ConstructTerm(coefficients, vars);
stopWatch.Stop();
Console.WriteLine(" done in {0} milliseconds", stopWatch.ElapsedMilliseconds);
GC.Collect();
Thread.Sleep(4000);
Console.Write("\tBenchmarking manual evaluation ...");
stopWatch = Stopwatch.StartNew();
double sum = 0;
for (int j = 0; j < inputData.Length; ++j)
sum += NativeEvaluate(coefficients, inputData[j]);
stopWatch.Stop();
Console.WriteLine(" sum is {0}, speed is {1} msec/op", sum, stopWatch.ElapsedMilliseconds / (double)inputData.Length);
GC.Collect();
Thread.Sleep(4000);
Console.Write("\tBenchmarking gradient approximation ...");
stopWatch = Stopwatch.StartNew();
sum = 0;
for (int j = 0; j < inputData.Length / 10; ++j)
{
var gradient = ApproxGradient(coefficients, inputData[j]);
sum += gradient.Sum();
}
stopWatch.Stop();
Console.WriteLine(" sum is {0}, speed is {1} msec/op", sum, 10 * stopWatch.ElapsedMilliseconds / (double)inputData.Length);
GC.Collect();
Thread.Sleep(4000);
Console.Write("\tBenchmarking AutoDiff compiled evaluation ...");
stopWatch = Stopwatch.StartNew();
sum = 0;
for (int j = 0; j < inputData.Length; ++j)
sum += compiledTerm.Evaluate(inputData[j]);
stopWatch.Stop();
Console.WriteLine(" sum is {0}, speed is {1} msec/op", sum, stopWatch.ElapsedMilliseconds / (double)inputData.Length);
GC.Collect();
Thread.Sleep(4000);
Console.Write("\tBenchmarking compiled differentiation ...");
stopWatch = Stopwatch.StartNew();
sum = 0;
for(int j = 0; j < inputData.Length; ++j)
{
var diffResult = compiledTerm.Differentiate(inputData[j]);
sum += diffResult.Item2 + diffResult.Item1.Sum();
}
Console.WriteLine(" sum is {0}, speed is {1} msec/op", sum, stopWatch.ElapsedMilliseconds / (double)inputData.Length);
}
}
19
Source : OptimizerExecutor.cs
with Apache License 2.0
from AlexWan
with Apache License 2.0
from AlexWan
private async void PrimeThreadWorkerPlace()
{
ReportsToFazes = new List<OptimazerFazeReport>();
int countBots = BotCountOneFaze();
SendLogMessage(OsLocalization.Optimizer.Message4 + countBots, LogMessageType.System);
DateTime timeStart = DateTime.Now;
_countAllServersMax = countBots;
for (int i = 0; i < _master.Fazes.Count; i++)
{
if (_neadToStop)
{
_primeThreadWorker = null;
TestReadyEvent?.Invoke(ReportsToFazes);
return;
}
if (_master.Fazes[i].TypeFaze == OptimizerFazeType.InSample)
{
OptimazerFazeReport report = new OptimazerFazeReport();
report.Faze = _master.Fazes[i];
ReportsToFazes.Add(report);
StartAsuncBotFactoryInSample(countBots, _master.StrategyName, _master.IsScript, "InSample");
StartOptimazeFazeInSample(_master.Fazes[i], report, _parameters, _parametersOn);
}
else
{
SendLogMessage("ReportsCount" + ReportsToFazes[ReportsToFazes.Count - 1].Reports.Count.ToString(), LogMessageType.System);
OptimazerFazeReport reportFiltred = new OptimazerFazeReport();
EndOfFazeFiltration(ReportsToFazes[ReportsToFazes.Count - 1], reportFiltred);
OptimazerFazeReport report = new OptimazerFazeReport();
report.Faze = _master.Fazes[i];
ReportsToFazes.Add(report);
StartAsuncBotFactoryOutOfSample(reportFiltred, _master.StrategyName, _master.IsScript, "OutOfSample");
StartOptimazeFazeOutOfSample(report, reportFiltred);
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
TimeSpan time = DateTime.Now - timeStart;
SendLogMessage(OsLocalization.Optimizer.Message7, LogMessageType.System);
SendLogMessage("Total test time = " + time.ToString(), LogMessageType.System);
TestReadyEvent?.Invoke(ReportsToFazes);
_primeThreadWorker = null;
return;
}
19
Source : Benchmark.cs
with Apache License 2.0
from alexyakunin
with Apache License 2.0
from alexyakunin
private void RunOnce()
{
if (MustWarmup) {
Action.Invoke(true);
SubtractAction?.Invoke(true);
MustWarmup = false;
}
if (MustGC)
GC.Collect();
var elapsed = TimeSpan.Zero;
var stopwatch = new Stopwatch();
stopwatch.Start();
try {
Action.Invoke(false);
}
finally {
stopwatch.Stop();
elapsed += stopwatch.Elapsed;
}
if (SubtractAction != null) {
if (MustGC)
GC.Collect();
stopwatch.Reset();
stopwatch.Start();
try {
SubtractAction.Invoke(false);
}
finally {
stopwatch.Stop();
elapsed -= stopwatch.Elapsed * SubtractActionFactor;
}
}
Timings.Add(elapsed);
}
19
Source : BurnTester.cs
with Apache License 2.0
from alexyakunin
with Apache License 2.0
from alexyakunin
public void TryInitialize()
{
if (_isInitialized)
return;
_allocations = new (int, sbyte, sbyte) [AllocationSequenceLength];
var sizeSampler = CreateSizeSampler(Random).Truncate(1, MaxSize);
var timeSampler = CreateTimeSampler(Random).Truncate(0, MaxTime);
var releaseCycleTimeInSeconds = 1.0 * GarbageHolder.TicksPerReleaseCycle / Stopwatch.Frequency;
var timeFactor = TimeSamplerUnitInSeconds / releaseCycleTimeInSeconds;
for (var i = 0; i < AllocationSequenceLength; i++) {
var size = (int) sizeSampler.Sample();
var arraySize = GarbageAllocator.ByteSizeToArraySize(size);
var time = timeSampler.Sample();
var timeStr = ((long) (time * timeFactor)).ToString();
var bucketIndex = (sbyte) (timeStr.Length - 1);
var generationIndex = (sbyte) (timeStr[0] - '0');
_allocations[i] = (arraySize, bucketIndex, generationIndex);
}
_startIndexes = Enumerable.Range(0, ParallelRunner.ThreadCount)
.Select(_ => Random.Next() % AllocationSequenceLength)
.ToArray();
// Creating _staticSet
var startOffset = Random.Next() % AllocationSequenceLength;
_staticSet = ParallelRunner.New(i => new SetAllocator(
StaticSetSize / ParallelRunner.ThreadCount,
_allocations,
(_startIndexes[i] + startOffset) % AllocationSequenceLength)
)
.Run()
.SelectMany(a => a.Set)
.ToArray();
GC.Collect(); // To make it uniform w/ Go test
_isInitialized = true;
}
See More Examples