Accessで「メモリー不足です」という正体不明のエラーが出て困っています。
使用環境はWindows10 Pro 64bit、Access2016・2013です。
これまでも平常通り行ってきた業務をしていたら、上記のように「メモリー不足です」というエラーが発生し、データ元のAccessファイルが壊れてしまうという現象が発生しました。
原因としては多々あるようですが、原因の1つとして分かったことがあったので共有させていただければと思います。
まず、エラーが出るPCと出ないPCがあること。
出るPCと出ないPCの差を見つける。
積んでいるメモリーの差
エラーが出るPC、出ないPCの差を見たところ、OSはどちらもWindows10 Pro 64bit、CPU等も特に目立った違いがない。
記事の最後にリンクを貼っているMicrosoftのページにあるレジストリの値も全て同じ設定でした。
その他で唯一違ったのが積んでいるメモリー容量で32GBと16GBでした。
先ほど見つけたのがメモリーの違いということで、エラーが発生するPCの32GBのメモリーを16GBに変更しました。
すると明らかにエラーの発生する頻度が激減!
ただし、激減なので全く出なくなったわけではありません。
完全に解消したいとことなのですが、エラーが出ないPCもあるため、原因の究明はかなり難しいものと思われます。
下記URLも参考にさせて頂いたので、同じように悩まれている方がいらっしゃれば参考にしていただければ幸いです。
参考URL:
Access2010およびAccess2019で謎にエラー、「メモリ不足」でクエリー停止、ちょっとだけ解決
Access でメモリ不足エラーが発生する現象の対処策について
System.Net.WebClientクラスを使用してHTMLソースを取得します。
//参照を追加 using System.Net;
・単純なダウンロード
//WebClientの作成 WebClient wc = new WebClient(); //文字コードを指定(Shift_JIS) wc.Encoding = Encoding.GetEncoding(932); //HTMLソースをダウンロードする string source = wc.DownloadString(url); //後始末 wc.Dispose();
・Timeout設定ができるようにするには
//文字コードを指定(Shift_JIS) Encoding enc = Encoding.GetEncoding(932); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Timeout = 3000; WebResponse res = req.GetResponse(); //文字コードを指定(Shift_JIS)し、HTMLソースをダウンロードする Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, enc); source = sr.ReadToEnd(); //後始末 sr.Close(); st.Close();
文字コードについてはこちらをご覧ください。
[テキストファイルの読み込みと書き込み]
GoogleMapを使用したiOSアプリを使っていて、地図を表示しているときに急にクラッシュするようになったので原因を調べました。
発生するエラーの内容は以下の通り
Fatal Exception: NSInternalInconsistencyException Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.
iOS13で内部仕様が変わったことによるもののようです。
どうもバックグラウンドスレッドからUIを触るなということらしいですが、
そんなことはしていないつもりでした。
おそらくこれまでよりも厳密になったのでしょうか…。
とにかく対応するしかありません。
元のソースコード
let session = URLSession(configuration: URLSessionConfiguration.default) let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: { (data, response, error) in if let urlContent = data { print(urlContent) } }) task.resume()
修正したコード
let session = URLSession(configuration: URLSessionConfiguration.default) let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: { (data, response, error) in if let urlContent = data { DispatchQueue.main.sync { print(urlContent) } } }) task.resume()